springmvc中@requestBody,@restcontroller和@responseBody注解

@RequestBody(把接收的数据转换为java对象)

作用: 用于读取Request请求的body部分数据,是放在方法中参数类型之前@RequestBody需要接的参数是一个string化的json字符串使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到对象(javaBean)上。再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。

一般此注解用于ajax获取数据,因此请求时注意的是Content-Type的值是application/json, application/xml这种,如下:

var answerinfo = {
	    "address":1,
	    "answer":2,
	    "phone":3,
	    "giftId":3,
	    "name":3
	}
function submit(){
	$.ajax({                                
	    url:"/dior-inside-gift/submitUserData.do",
	    contentType:"application/json;charset=UTF-8",
	    type:'POST',
	    dataType:'json',// 返回值类型
	    data:JSON.stringify(answerinfo)//参数转化为json字符串
	    success:function(data){
	    	alert(data.text);
	    }
	});
} contentType:"application/json;charset=UTF-8",
	    type:'POST',
	    dataType:'json',// 返回值类型
	    data:JSON.stringify(answerinfo)//参数转化为json字符串
	    success:function(data){
	    	alert(data.text);
	    }
	});
}

 

另外要使用@RequestBody这个注解还需要额外配置一个Bean,也就是自动帮我们接收json并转成对象的消息转换器messageConverter,Spring3.1之后的版本,那么配置在RequestMappingHandlerAdapter下:

 

如不要求复杂的转化也可以通过<mvc:annotation-driven />来代替省略上面配置

<bean  
    class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">  
    <property name="messageConverters">  
        <list>  
            <bean  
                class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">  
            </bean>  
        </list>  
    </property>  
</bean>  

在下一个注解之前,穿插一个点:

 

             SpringMVC提供了一个@RequestBody,它是用来处理前台定义发来的数据Content-Type: 不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等; 


           在Ajax中,我们没有定义Content-type的类型,Jquery默认使用application/x-www-form-urlencoded类型。那么意思就是SpringMVC的@RequestParam注解,Servlet的request.getParameter是可以接受到以这种格式传输的JSON对象的

为什么呢!?GET请求想必大家都不陌生,它将参数以url?username=”admin”&password=123这种方式发送到服务器,并且request.getParameter可以接收到这种参数,我们在浏览器地址栏上也可以看到这一点。而我们Ajax使用的POST,并且发送的是JSON对象,那这个Content-Type x-www-form-urlencoded的编码方式把JSON数据转换成一个字串,(username=”admin”&password=123)然后把这个字串添加到url后面,用?分割,(是不是和GET方法很像),提交方式为POST时候,浏览器把数据封装到HTTP BODY中,然后发送到服务器。所以并不会显示在URL上。


                 所以使用@RequestBody注解的时候,前台的Content-Type必须要改为application/json,如果没有更改,后台日志就会报错Content type ‘application/x-www-form-urlencoded;charset=UTF-8’ not supported,,所以前台的Content-Type需要更改,同时我们的data也要更改成JSON字符串而不是JSON对象

 

@ResponseBody(把服务器端的java对象转换为指定格式的数据并作为返回值)

 

作用:

该注解用于将Controller的方法返回的对象,注解可以放在方法前也可以放在返回值类型前,通过适当的HttpMessageConverter转换为指定格式(JSON)后,写入到Response对象的body数据区。要注意的是

 返回的不是html标签的页面,而是其他某种格式的数据时(如json、xml等);因此大多是应用于ajax加载内容的情况下。

 

在使用 <mvc:annotation-driven />标签配置时,默认配置了RequestMappingHandlerAdapter(注意是RequestMappingHandlerAdapter不是AnnotationMethodHandlerAdapter,,并为他配置了一下默认的HttpMessageConverter。

 

最后说@restcontroller

@restcontroller其实是@controller和@responsebody的结合 ,实际开发中可以用@restcontroller代替@cotroller使用,而且直接省略@responsebody注解也可以实现方法返回数据对象。

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WannaRunning

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值