注解@RequestParam和注解@RequestBody的作用

Springboot注解@RequestParam和@RequestBody

  • @RequestParam
    @RequestMapping(value = "test")
    @ResponseBody
    public Object test(@RequestParam Integer userId) {
       return userId;
    }
  1. 用于指定控制器接收参数的名称:如@RequestParam("userId")代表前端必须要传递userId字段才能执行此方法,否则会报400错误。可以接收url参数和请求体参数,一旦加上必须传递对象的参数字段。不能接收application/json类型的请求;

  2. 使用value或name指定接收参数的名称:如@RequestParam(value = "id")或@RequestParam(name = "id"),此时就必须传递id这个请求参数,传递userId或不传都报400错误。也可以使用简便写法:@RequestParam("id")两者效果一样。

  3. 使用defaultValue指定参数的默认值:@RequestParam(defaultValue = "20"),不传递该请求参数,该参数会有默认值;传了该参数则不会使用默认值;注意默认值必须是字符串,即使需要的参数为其他类型,SpringMVC也会自动处理成其他的类型。

    //SpringMVC自动将字符串"20"转换成整形20
    @RequestMapping(value = "test")
    @ResponseBody
    public Object test(@RequestParam(defaultValue = "20") Integer userId) {
       return userId;
    }
  1. 使用required指定参数是否必须,@RequestParam(required = false)代表非必须。默认为true。

  2. 加与不加的区别:加上这个注解前端必须传递相应的参数,否则报400;如:localhost:8080/test 报400错误 ,localhost:8080/test?id=1 才能执行不加前端传与不传相应的参数都不会报错,方法都能执行。

  • @RequestBody
  1. 主要用于接收请求体中的json字符串,所以不能接收GET请求的参数。

  2. 该注解只有一个required属性,用来指定参数是否为必须,默认true。所以使用这个注解的参数就不能任意指定名称了,必须和参数真实名称一致才行。

  3. 当参数为实体类时,会自动封装字段为实体,而@RequestParam没有这个功能。

    @RequestMapping(value = "test")
    @ResponseBody
    public Object test(@RequestBody User user) {
       return user;
    }

image

posted @ 2022-08-31 20:32  加瓦同学  阅读(632)  评论(0)    收藏  举报