当在 Spring 框架中进行 Web 开发时,@RequestBody、@RequestParam 和 @PathVariable是常用的注解,用于处理不同类型的请求参数。
当在 Spring 框架中进行 Web 开发时,@RequestBody
、@RequestParam
和 @PathVariable
是常用的注解,用于处理不同类型的请求参数。
1.@RequestBody
注解:
@RequestBody
注解通常用于将 HTTP 请求的请求体(request body)绑定到方法参数上。它可以将传递的 JSON、XML 或其他媒体类型的请求体转换为对应的 Java 对象。一般在 POST 或 PUT 请求中使用,用于接收客户端发送的数据。
示例:
@PostMapping("/create")
public ResponseEntity<?> create(@RequestBody User user) {// 处理用户创建请求,user为请求体中的JSON对象转换的User对象// ...
}
携带请求体的 POST 请求:
javascript
let user = {name: 'John',age: 25
};
axios.post('/users', user)//("你的请求路径",请求携带的参数).then(response => {// 处理返回的数据}).catch(error => {// 处理错误});
在这个示例中,我们使用 axios
发送了一个 POST 请求,并将用户对象作为请求的数据直接发送给后端。
2.@RequestParam
注解:
@RequestParam
注解用于从请求的 URL 或查询参数中提取单个请求参数值。它可以指定参数的名称、是否必需、默认值等。一般用于处理 GET 请求的查询参数或 POST 请求的表单参数。
@GetMapping("/user")
public ResponseEntity<?> getUser(@RequestParam("id") Long userId) {// 根据userId获取用户信息// ...
}
2.1 我之前在比如微信向程序中发送请求使用的是URL的GET请求方式。
wx.request({method:"GET",url: `http://localhost:8080/sfzy_applet_ssm/courseCollection/selectCourse`,data: {userId: app.globalData.userInfo.userId},success(resp) {// console.log(resp);_this.setData({payedCourseList: resp.data.data.courseList})app.delListImgSrc(_this, resp.data.data,"payedCourseList");}})
3.@PathVariable
注解:
@PathVariable
注解用于从请求的路径中提取动态的路径参数。路径参数是 URL 中以占位符形式表示的变量。一般用于 RESTful 风格的接口中,用于传递资源的唯一标识符或其他相关参数。
@GetMapping("/user/{id}")
public ResponseEntity<?> getUserById(@PathVariable("id") Long userId) {// 根据userId获取用户信息// ...
}
如果你使用 Vue.js 来发送请求并携带路径参数或查询参数,以下是一些示例:
携带路径参数的 GET 请求:
javascript
let userId = 123;
axios.get(`/users/${userId}`).then(response => {// 处理返回的数据}).catch(error => {// 处理错误});
在这个示例中,我们使用 axios
库发送 GET 请求,并通过模板字符串将用户ID作为路径参数拼接到 URL 中。
为什么有时候需要使用其他注解,而不仅限于 @RequestBody
、@RequestParam
和 @PathVariable
呢?这是因为不同的注解提供了更灵活的参数处理方式,适应不同的请求场景和需求。比如:
@RequestHeader
:用于获取 HTTP 请求头中的值。@CookieValue
:用于获取 HTTP 请求中的 Cookie 值。@ModelAttribute
:用于将请求参数绑定到模型对象。- 等等。
根据具体的业务需求和请求参数类型,选择合适的注解来处理请求参数,以便更方便地获取和处理请求数据。
4.例如以下这个方式
携带查询参数的 GET 请求:
javascript
let page = 1;
let size = 10;
axios.get('/users', {params: {page: page,size: size}
}).then(response => {// 处理返回的数据}).catch(error => {// 处理错误});
在这个示例中,我们通过在 params
对象中设置查询参数来传递 page
和 size
参数的值。
4.1URL 查询参数(Query Parameters):将查询参数直接附加在 URL 后面,使用?
和&
进行连接。例如:/users?page=2&size=10
。
-
@GetMapping("/users") public ResponseEntity<List<User>> getUsers(@RequestParam("page") int page, @RequestParam("size") int size) {// 处理逻辑 }
在这种情况下,可以使用
@RequestParam
注解来获取查询参数。
4.2请求体中的 JSON 参数:将查询参数封装在请求体中作为 JSON 数据发送。
例如:
-
json
{"page": 2,"size": 10
}
java
@PostMapping("/users")
public ResponseEntity<List<User>> getUsers(@RequestBody UserRequest request) {int page = request.getPage();int size = request.getSize();// 处理逻辑
}
在这种情况下,可以使用@RequestBody
注解来将请求体的 JSON 数据映射到自定义的请求对象(UserRequest
)中,然后从该请求对象中获取查询参数。
上述我所提供的一些示例可以参考,在 Vue.js 中使用 axios
库发送请求时,如何携带路径参数、查询参数以及请求体。你可以根据具体需求,结合 Vue.js 的语法和功能,对 URL 进行拼接和参数传递。