• Spring @RequestParam @RequestBody @PathVariable 等参数绑定注解详解


    背景


    昨天一个人瞎倒腾spring boot,然后遇到了一点问题,所以把这个问题总结一下。
    主要讲解request 数据到handler method 参数数据的绑定,所用到的注解和什么情形下使用。

    正文


    注解名 应用场景描述 调用示例 示例代码
    @PathVariable 当使用@RequestMapping URI template 样式映射时,
    即 someUrl/{paramId},
    这时的paramId可通过 @Pathvariable注解绑定它传过来的值到方法的参数上
    GET
    [host]/users/{id}
    @GetMapping(value = "/{id}")
    public User getUserById(@PathVariable Long id) {
    return users.get(id);
    }
    @RequestHeader @RequestHeader 注解,
    可以把Request请求header部分的值绑定到方法的参数上
    http request head
    Host localhost:8080
    Accept application/json
    Accept-Encoding gzip,deflate
    Keep-Alive 300
    @GetMapping
    public String getChartset(@RequestHeader("Accept-Encoding") String encoding) {
    //…
    }
    @CookieValue @CookieValue 可以把Request header中关于cookie的值绑定到方法的参数上 cookie值
    JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84
    @GetMapping("/displayHeaderInfo")
    public void displayHeaderInfo(@CookieValue("JSESSIONID") String cookie) {
    //…
    }
    @RequestParam A) 常用来处理简单类型的绑定,通过Request.getParameter() 获取的String可直接转换为简单类型的情况;
    (String–> 简单类型的转换操作由ConversionService配置的转换器来完成)
    因为使用request.getParameter()方式获取参数,所以可以处理GET 方式中queryString的值,也可以处理POST方式中 body data的值;
    B) 用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容,提交方式GET、POST
    C) 该注解有两个属性: value、required;
    value:用来指定要传入值的id名称;
    required:用来指示参数是否必须绑定;
    GET
    [host]/users?id={id}
    @GetMapping(value = "/{id}")
    public User getUserById(@RequestParam Long id) {
    return users.get(id);
    }
    @RequestBody 该注解常用来处理Content-Type: 不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等;
    它是通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的。
    PUT
    [host]:8080/users/3
    RequestBody
    {
    "name": "小鸭",
    "age": 23
    }
    @PutMapping(value = "/{id}")
    public String updateUser(@PathVariable Long id, @RequestBody User user) {
    //…
    }
    @ModelAttribute 该注解有两个用法,一个是用于方法上,一个是用于参数上;
    用于方法上时: 通常用来在处理@RequestMapping之前,为请求绑定需要从后台查询的model;
    用于参数上时: 用来通过名称对应,把相应名称的值绑定到注解的参数bean上;要绑定的值来源于:
    A) @SessionAttributes 启用的attribute 对象上;
    B) @ModelAttribute 用于方法上时指定的model对象;
    C) 上述两种情况都没有时,new一个需要绑定的bean对象,然后把request中按名称对应的方式把值绑定到bean中。
    POST
    [host]/users/1/aaa/11
    @PostMapping(value = "/{id}/{name}/{age}")
    public String addUser(@ModelAttribute User user) {
    //…
    }




  • 相关阅读:
    投稿007期|令人震惊到发指的PyObject对象代码设计之美
    使用OpenCV通过摄像头捕获实时视频并探测人脸
    洛谷 P1259【黑白棋子的移动】
    入门OJ 1281【营救(save)】
    入门OJ 3204【射击】
    POJ 3126【长度为素数的路径个数】
    POJ 1980【Unit Fraction Partition】
    洛谷 P2374【搬运工】
    【常用算法总结——记忆化搜索】
    P3052 [USACO12MAR]【摩天大楼里的奶牛(Cows in a Skyscraper)】
  • 原文地址:https://www.cnblogs.com/snifferhu/p/6203670.html
走看看 - 开发者的网上家园