@PathVariable、@RequestParam、@RequestBody注解

在一次请求过程中,这三个注解还是经常能用到的@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
2
3
4
@RequestMapping("/api/{id}/test")
public void test(@PathVariable("id") int id) {
log.info("url中的不定值id:{}", id); //此处打印:url中的不定值id:9527
}

@RequestParam 获取 request 请求参数中的值

请求路径:https://www.wjup.top/api/user/test?username=tom&age=18
请求参数:username=tom&age=18

1
2
3
4
@RequestMapping(value = "/api/user/test")
public void query(@RequestParam(value="username") String username) {
log.info("username = {}", username); //此处打印:username = tom
}

@RequestParam 默认必传的,不能为null

如上面例子,请求路径是 https://www.wjup.top/api/user/test?age=18 ,程序一定会报错的,如果username不传时, 就是null ,而 @RequestParam 默认是必传的。

@RequestBody 获取 request 请求体 body 的值

  1. 仅限用于 post 请求

  2. 因为一次请求只能有一个请求体body,所以方法参数中也只能有一个@RequestBody参数。但是,也可以把 请求体body的对象拆分开,用多个@RequestBody参数来接收。

  3. 一般情况下,@RequestBody只处理 Content-Type 是 application/json 或者 application/xml。

    (a)、使用时,必须在请求头中声是 Content-Type 是 application/json 或者 application/xml。
    (b)、参数必须通过 HttpEntity 传递。
    (c)、SpringMVC 通过使用HandlerAdapter 配置的 HttpMessageConverters 来解析 HttpEntity 中的数据,然后绑定到相应的 bean上。

  4. 特殊情况,@RequestBody 也可以处理 Content-Type 类型为 application/x-www-form-urlcoded 编码的内容。@RequestBody会将处理结果放到一个MultiValueMap<String,String> 中。

    1
    2
    3
    4
    5
    @RequestMapping(value="/api/insert",method=RequestMethod.POST,consumes="application/json")
    @ResponseBody
    public void addUser(@RequestBody JSONObject json){
    log.info( json.toJSONString() );
    }

-------------本文结束感谢您的阅读-------------
感觉文章不错,就赏个吧!
0%