@RequestParam、@PathVariable、@RequestBody、@ResponseBody注解辨析

@RequestParam

@RequestParam:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)
例如:defaultValue为给name设定默认值,@RequestParam中的value值必须跟http://localhost:8080/hello/show18?name=998?后的参数名对应上

@RequestMapping("show18")
    public ModelAndView test18(@RequestParam(value="name",required=true,defaultValue="hello")String name){
        ModelAndView mv = new ModelAndView();
        mv.setViewName("hello2");
        mv.addObject("msg", "接收普通请求参数:" + name);
        return mv;
    }

@PathVariable

@PathVariable是spring3.0的一个新功能:接收请求路径中占位符的值

@PathVariable("xxx")
通过 @PathVariable 可以将URL中占位符参数{xxx}绑定到处理器类的方法形参中@PathVariable(“xxx“) 

例如对于如下代码:

@RequestMapping("show5/{id}/{name}")
    public ModelAndView test5(@PathVariable("id") Long ids ,@PathVariable("name") String names){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","占位符映射:id:"+ids+";name:"+names);
        mv.setViewName("hello2");
        return mv;
    }

当我们给定请求路径为http://localhost:8080/hello/show5/1/james时,经过@PathVariable修饰的参数idsnames,会分别被赋值为1james

@RequestBody

  • 该注解用于读取 Request 请求的 body 部分数据,使用系统默认配置的 HttpMessageConverter 进行解析,然后把相应的数据绑定到要返回的对象上;
  • 再把 HttpMessageConverter 返回的对象数据绑定到 controller 中方法的参数上。
    具象的说,就是将前台返回的数据,封装到@RequestBody注解修饰的相应类中,如下所示代码,返回的数据封装到Brand类
@PostMapping(value = "/search")
    public Result<List<Brand>> findList(@RequestBody Brand brand){
        List<Brand> brands=brandService.findList(brand);
        return new Result<List<Brand>>(true,StatusCode.OK,"条件搜索查询成功",brands);
    }

使用时机:

GET、POST方式提交 : 根据 request header Content-Type 的值来判断:
application/x-www-form-urlencoded可选(即非必须,因为这种情况的数据 @RequestParam, @ModelAttribute 也可以处理,当然@RequestBody也能处理);
multipart/form-data不能处理(即使用@RequestBody不能处理这种格式的数据);
其他格式必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理);
PUT 方式提交 : 根据request header Content-Type的值来判断:
application/x-www-form-urlencoded必须
multipart/form-data不能处理
其他格式必须

@ResponseBody

  • 该注解用于将 Controller 的方法返回的对象,通过适当的 HttpMessageConverter 转换为指定格式后,写入到 HTTP 中的 Response 对象的body 数据区。然后可以在前台页面时显示这些信息。

注意

  • 在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
  • @ResponseBody是作用在方法上的,@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用【也就是AJAX】。

使用时机

返回的数据不是html标签的页面,而是其他格式数据,比如json、xml等。

参考链接

https://www.jianshu.com/p/64b22da6c9ab

https://blog.csdn.net/originations/article/details/89492884

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值