@RequestBody应用

之前写过一篇记录文章,写的是将一个比較复杂的数据结构在前台组合起来后传递到后台。

当时并不太了解@RequestBody。也并没有使用js提供的JSON.stringify()方法

全部都是自己写的,比方js将json转为字符串的方法,后台接收json转成实体的方法。


近期接触到了@RequestBody,于是想将之前的代码改写一下。

首先@RequestBody须要接的參数是一个string化的json,这里直接使用JSON.stringify(json)这种方法来转化

其次@RequestBody。从名称上来看也就是说要读取的数据在请求体里。所以要发post请求

第三,要设置contentType,contentType:"application/json,明白的告诉server发送的内容是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);
	}

非常easy吧,无需手动进行json与实体的转换,仅仅要能映射上去(也就是字段名和json的key相相应。value能够匹配上数据类型),那么就能够直接转换。

怎样定义“能映射上去”呢?若是json中的key在实体中都能找到相应的field。那么就是“能映射上去”,也就是说:

前台传入的json中的key在实体中必需要存在,不然就会报错,比方以下这个前台传入的json中多了一个key为id的键值对

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包

posted on 2017-07-19 12:06  wgwyanfs  阅读(107)  评论(0编辑  收藏  举报

导航