Spring注解@ResponseBody与@RequestBody,@PathVariable和@RequestParam、@RequestBody对比使用

1.@ResponseBody与@RequestBody
作用:@ResponseBody注解用于将Controller的方法返回的对象,通过springmvc提供的HttpMessageConverter接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端。
作用:@RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容(json数据)转换为java对象并绑定到Controller方法的参数上。
什么是HttpMessageConverter
作用:负责将请求信息转换为一个对象(类型为 T),将对象(类型为 T)输出为响应信息。
Spring注解@ResponseBody与@RequestBody,@PathVariable和@RequestParam、@RequestBody对比使用_第1张图片
2.@PathVariable和@RequestParam、@RequestBody的区别

@RequestParam :是从请求里面获取参数.
用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)

RequestParam可以接受简单类型的属性,也可以接受对象类型。

@PostMapping("updateMixerBack")
    @ResponseBody
    public R updateMixerBack(@RequestParam("tdlvId") Integer tdlvId){
        Tdlv tdlv =tdlvService.getOneByTdlvId(tdlvId);
        if(null ==tdlv){
            return new R(false,"未找到该发货单记录");
        }

        List dlvList = dlvService.findDlvByTdlv(tdlvId);
        if(dlvList.size()==0){
            return new R("未找到发货单记录");
        }

     return dlvService.updateDlvCur(dlvList,tdlv);
    }

@RequestBody
处理HttpEntity传递过来的数据,一般用来处理非Content-Type: application/x-www-form-urlencoded编码格式的数据。

GET请求中,因为没有HttpEntity,所以@RequestBody并不适用。
POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上。

 @PutMapping("addSginWdlv")
    public R  addSginWdlv(@RequestBody Wdlv wdlv){
        WdlvSign wdlvSign =wdlvService.findWdlvSignByWid(wdlv.getWdlvId());
        if(null == wdlvSign){
            return new R(false,"该条记录在待签送水单中不存在,无法签收");
        }
        wdlvService.addSginWdlv(wdlv);
        return new R(true,"签收成功");
    }
}

Spring注解@ResponseBody与@RequestBody,@PathVariable和@RequestParam、@RequestBody对比使用_第2张图片

@PathVariable :从路径里面去获取变量

  @GetMapping("/findMaxCanNum/{lineId}")
    public R findMaxCanNum(@PathVariable(value = "lineId") Integer lineId){
        Integer canNum = canService.findMaxCanNum(lineId);
        if(canNum == null){
            return R.ok(0);
        }
        return R.ok(canNum);
    }

你可能感兴趣的:(Spring)