@RequestBody应用

首先@RequestBody需要接的参数是一个string化的json,这里直接使用JSON.stringify(json)这个方法来转化(切记,如果传递json对象时会报错,根本走不到后台自己写的方法,直接在框架中报错。com.alibaba.fastjson.JSONException: error parse false 也就是解析错误)
其次@RequestBody,从名称上来看也就是说要读取的数据在请求体里,所以要发post请求
第三,要设置contentType,contentType:"application/json,明确的告诉服务器发送的内容是json,而默认的contentType是application/x-www-form-urlencoded;charset=UTF-8那么可以开始写出代码了:
        $.ajax({
            type: "post",
            contentType:"application/json",
            url: "repairs/saveDispatches",
            data: JSON.stringify(dispatchesDTO),
            success: function(data){
                if(!data.success){
                  alertError("派工失败");
                }else{
                alertSuccess("派工成功");
            }
        })
后台怎么接呢?这就轮到@RequestBody出马了
    @RequestMapping("/repairs/saveDispatches")
    public void saveDispatches(@RequestBody DispatchesDTO dispatchesDTO,
            HttpServletResponse response) throws IOException {
        dispatchesService.saveDispatches(dispatchesDTO);
        success(response);
    }
很简单吧,无需手动进行json与实体的转换,只要能映射上去(也就是字段名和json的key相对应,value可以匹配上数据类型),那么就可以直接转换。
如何定义“能映射上去”呢?若是json中的key在实体中都能找到对应的field,那么就是“能映射上去”,也就是说:
前台传入的json中的key在实体中必须要存在,不然就会报错,类似下面的错误
org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Unrecognized field "id" (Class com.westsoft.kft.repairs.dto.DispatchesDTO), not marked as ignorable
其实要使用@RequestBody这个注解还需要额外配置一个Bean,也就是自动帮我们接收json并转成对象的消息转换器messageConverter
由于我使用的是Spring3.1之后的版本,那么配置在RequestMappingHandlerAdapter下
    <!--Spring3.1开始的注解 HandlerAdapter -->
    <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>

当然也可以通过<mvc:annotation-driven />来简单的配置,这里就不过多介绍了~


最后再要提到几点

一、若
    1、前台发送请求时未指定contentType为json/application
    2、Spring中未配置messageConverter
    那么会报错误415,也就是类型不支持
    前者是因为Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
    而后者是因为Content type 'application/json;charset=UTF-8' not supported
二、由于Spring中使用的json转换用到的是jackson,所以需要引入jackson包
怎么使用springmvc的@requestbody 返回json数据
先配置 XXX_ servletxml
<!-- 整合jackson 返回一个json格式 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="mappingJacksonHttpMessageConverter"/>
</list>
</property>
</bean>
<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
再然后Action方法里注解就可以
@RequestMapping(value="/XXXXXX", method = RequestMethod.POST)
@ResponseBody
public 返回类型 XXXXXX(){
}
@responsebody一般在什情况下使用,他的好处与坏处?
@responsebody表示该方法的返回结果直接写入HTTP response body中

一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。

三,如果传递的数据中如果有时间类型,要格外注意一下,对于 01/21/2000  00::00:00这种格式的属性在转化的时候会出现错误,需要在使用的时候自己处理一下。




  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值