@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>web

固然也能够经过<mvc:annotation-driven />来简单的配置,这里就不过多介绍了~ajax

最后再要提到几点spring

1、若 一、前台发送请求时未指定contentType为json/application 二、Spring中未配置messageConverter 那么会报错误415,也就是类型不支持 前者是由于Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported 然后者是由于Content type 'application/json;charset=UTF-8' not supported 2、因为Spring中使用的json转换用到的是jackson,因此须要引入jackson包 怎么使用springmvc的@requestbody 返回json数据 先配置 XXX_ servletxmljson

<!-- 整合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数据。mvc

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

相关文章
相关标签/搜索