@ResponseBody||@RequestBoby||@requestParam的注解使用和注意事项

1.@ResponseBody的作用

不加@ResponseBody,是将方法返回的值作为视图名称,并自动匹配视图去显示,
而加上@ResponseBody就仅仅是将方法返回值当作内容直接返回到客户端,并且会自适应响应头的content-type,返回的字符串符合json,那么content-type就是application/json,如果是普通字符串,就是text/plain,但是加上注解属性produces=application/json,那么不管内容是什么格式,响应头的content-type就一直是application/json,不再去做自适应,至于内容是不是json都不重要了

@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。

注意:在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。

@ResponseBody是作用在方法上的,@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用【也就是AJAX】。

注意:在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。 比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据。@RequestBody 将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。

   

后台 Controller类中对应的方法:
    @RequestMapping("/login.do")
    @ResponseBody
    public Object login(String name, String password, HttpSession session) {
        user = userService.checkLogin(name, password);
        session.setAttribute("user", user);
        return new JsonResult(user);
    }

2.@RequestBody作用

作用在形参列表上,用于将前台发送过来固定格式的数据【xml格式 或者 json等】封装为对应的 JavaBean 对象,
封装时使用到的一个对象是系统默认配置的 HttpMessageConverter进行解析,然后封装到形参上。
@RequestMapping("/login.do")
    @ResponseBody
    public Object login(@RequestBody User loginUuser, HttpSession session) {
        user = userService.checkLogin(loginUser);
        session.setAttribute("user", user);
        return new JsonResult(user);
    }

@RequestBody

@RequestBody 注解则是将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。

作用:

   1) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定

       到要返回的对象上;  

   2) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。

3.Centent-Type的四种方式

1:浏览器原生表单提交:application/x-www-form-urlencoded

1)浏览器的原生form表单
2) 提交的数据按照 key1=val1&key2=val2 的方式进行编码,key和val都进行了URL转码

2:提交文件表单提交:multipart/form-data

常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 form 的 enctype 等于这个值。

3:json类型:application/json

消息主体是序列化后的 JSON 字符串,这个类型越来越多地被大家所使用
这种方案,可以方便的提交复杂的结构化数据,特别适合 RESTful 的接口。各大抓包工具如 Chrome 自带的开发者工具、Firebug、Fiddler,都会以树形结构展示 JSON 数据,非常友好

4:xml类型:application/xml

是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范

3.1下面主要讨论:@requestParam 和@requestBoby如何搭配以下两种使用:

1.application/x-www-form-urlencoded

2.application/json

另外两种比较清晰

3.1.1@requestParam 和@requestBoby的使用时机

两种注解获取参数的功能与请求方法无关,不管是GET还是POST或者其他

3.1.1.1@requestParam

1.只要是GET请求的参数,都可以用这种注解获取 --(因为浏览器当前的实现是不允许 get 发送 body, 但后端应用通常可以发送. 比如 nodejs 或 postman )
2.无论是GET还是POST,参数只要是放在URL后面的,都可以使用此种注解获取到参数值
3.POST提交方式,content-type :application/x-www-form-urlencoded 的 可以获取到参数
4.POST提交方式,content-type :application/json 的 无法用此注解获取到参数
@requestParam注解用于获取请求参数,也就是放在URL后面的参数,获取不到请求boby中的参数(当然-GET没有请求体)

@requestBoby (Boby中的参数)

@requestBoby注解用于获取请求boby中参数,将其封装成javaBean对象 (当然-GET没有请求体) 
1.使用@requestBoby这个注解时候,一般是将参数传到后端,封装成javaBean对象,所以只能用在POST请求 并且Content-Type:applciation/json

总结:

@requestParam 
1.用来获取URL后面追加的参数
2.POST请求,content-type:application/json 的body中的参数
@requestBoby
1.接收POST ,content-type:application/json的body参数 (后端一般封装成javaBean对象处理)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值