在一次请求过程中,这三个注解还是经常能用到的@PathVariable
、@RequestParam
、@RequestBody
。
@PathVariable 映射 URL 绑定的占位符
@PathVariable可以将 URL 中 占位符参数 绑定到控制器处理 方法的入参 中:URL 中的 { xxx } 占位符可以通过 @PathVariable(“xxx”) 绑定到操作方法的入参中。
请求路径 : https://www.wjup.top/api/9527/test?username=tom&age=18
请求URL : https://www.wjup.top/api/9527/test
1 | "/api/{id}/test") ( |
@RequestParam 获取 request 请求参数中的值
请求路径:https://www.wjup.top/api/user/test?username=tom&age=18
请求参数:username=tom&age=18
1 | "/api/user/test") (value = |
@RequestParam 默认必传的,不能为null
如上面例子,请求路径是 https://www.wjup.top/api/user/test?age=18
,程序一定会报错的,如果username不传时, 就是null ,而 @RequestParam 默认是必传的。
@RequestBody 获取 request 请求体 body 的值
仅限用于 post 请求
因为一次请求只能有一个请求体body,所以方法参数中也只能有一个@RequestBody参数。但是,也可以把 请求体body的对象拆分开,用多个@RequestBody参数来接收。
一般情况下,@RequestBody只处理 Content-Type 是 application/json 或者 application/xml。
(a)、使用时,必须在请求头中声是 Content-Type 是 application/json 或者 application/xml。
(b)、参数必须通过 HttpEntity 传递。
(c)、SpringMVC 通过使用HandlerAdapter 配置的 HttpMessageConverters 来解析 HttpEntity 中的数据,然后绑定到相应的 bean上。特殊情况,@RequestBody 也可以处理 Content-Type 类型为 application/x-www-form-urlcoded 编码的内容。@RequestBody会将处理结果放到一个MultiValueMap<String,String> 中。
1
2
3
4
5"/api/insert",method=RequestMethod.POST,consumes="application/json") (value=
public void addUser(@RequestBody JSONObject json){
log.info( json.toJSONString() );
}