关闭

SpringMVC中@RequestBody的应用

标签: spring mvc
6192人阅读 评论(0) 收藏 举报
分类:
        一个比较复杂的数据结构在前台组合Json数据后传递到后台,之前所有的前后台数据转换都是自己写的,比如js将json转为字符串的方法,后台接收json转成实体的方法。使用SpringMVC之后,可以使用@RequestBody注释接受参数,具体使用如下:

       首先,@RequestBody需要接的参数是一个String化的json,这里直接使用JSON.stringify(json)这个方法来转化;其次,@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在实体中必须要存在,不然就会报错,比如下面这个前台传入的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包。

0
0
查看评论

SpringMVC @RequestBody请求参数在postman中的请求

使用SpringMVC框架,controller使用参数  @RequestBody  LoginReq req   注解方式模拟http请求 需要请求header添加两个参数 设置  Header参数    Content-T...
  • qiyejunlintian
  • qiyejunlintian
  • 2017-03-15 15:29
  • 6310

springmvc 使用 @RequestBody接收参数

Content-Type: text/plain,application/json;1、如果发送过来的Content-Type是text/plain类型的话, @RequestBody要用到String的参数类型接收 2、如果是application/json类型的话,就需要使用我们在sprin...
  • danshijin
  • danshijin
  • 2015-12-06 16:33
  • 4282

Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解

引言: 接上一篇文章,对@RequestMapping进行地址映射讲解之后,该篇主要讲解request 数据到handler method 参数数据的绑定所用到的注解和什么情形下使用; 简介: handler method 参数绑定常用的注解,我们根据他们处理的Request的不同内容...
  • kobejayandy
  • kobejayandy
  • 2013-10-13 23:44
  • 127396

SpringMVC @RequestBody使用

Spring mvc是一个非常轻量的mvc框架,注解可以大大减少配置,让请求的拦截变得比较简单。这次记录下@RequestBody 注解接收参数尤其是数组参数的用法。 关于容器的配置不再多说,这里写出spring-servlet.xml的sechme:<?xml version="...
  • micro_hz
  • micro_hz
  • 2016-11-14 12:15
  • 4270

@RequestBody的正确使用方法

最近在接收一个要离职同事的工作,接手的项目是用SpringBoot搭建的,其中看到了这样的写法: @RequestMapping("doThis") public String doThis(HttpServletRequest request, ...
  • li954644351
  • li954644351
  • 2016-04-15 11:53
  • 74280

Spring MVC之@RequestBody, @ResponseBody 详解

引言: 接上一篇文章讲述处理@RequestMapping的方法参数绑定之后,详细介绍下@RequestBody、@ResponseBody的具体用法和使用时机; 简介: @RequestBody 作用:       i) 该注解用...
  • kobejayandy
  • kobejayandy
  • 2013-10-14 00:07
  • 301231

springmvc中@requestbody注解接收前端参数使用content-type类型

springmvc中@requestbody注解接收前端参数使用content-type类型 postman设置content-type格式
  • ljxbbss
  • ljxbbss
  • 2017-07-05 15:42
  • 4056

SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(下)

配合@RequestBody注解,以及HTTP Request Header中的Content-Type属性,HTTP Request Body中包含的XML或者JSON数据可以自动被转换成对应的Java对象。
  • fw0124
  • fw0124
  • 2015-09-09 11:07
  • 9051

springmvc中@requestbody注解接收请求参数

@requestBody注解的使用   1、@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况...
  • shine0112
  • shine0112
  • 2017-05-27 09:36
  • 5663

@RequestParam和@RequestBody的区别-------springMVC

springMVC中@RequestParam和@RequestBody2个注解的差别,什么时候适合使用。
  • qq_27093465
  • qq_27093465
  • 2016-01-14 18:03
  • 14039
    个人资料
    • 访问:1622576次
    • 积分:18218
    • 等级:
    • 排名:第615名
    • 原创:155篇
    • 转载:913篇
    • 译文:34篇
    • 评论:222条
    文章分类
    最新评论