@RequestBody的使用
一、说明
首先@RequestBody需要接的参数是一个string化的json,这里直接使用JSON.stringify(json)这个方法来转化
其次@RequestBody,从名称上来看也就是说要读取的数据在请求体里,所以要发post请求
第三,要设置contentType,contentType:"application/json,明确的告诉服务器发送的内容是json,而默认的contentType是application/x-www-form-urlencoded; charset=UTF-8
(前台传输json字符串,后台通过@RequestBody接受,直接映射到实体对象中,无需将json字符串转为json对象,再将值赋值到对象中。)
二、参考代码
那么可以开始写出代码了:
$.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包
原文出处:
[1] 多弗朗明哥, 【Java】关于@RequestBody, https://www.cnblogs.com/dflmg/p/6364141.html
最新文章
- Jconsole远程监控tomcat 的JVM内存(linux、windows)
- 清除WebLogic8.1缓存
- C#获得系统打开的端口和状态
- GUN485项目的总结
- EcilpsePHP studio 3.0 运行(run)环境配置
- WebKit笔记
- css实现带箭头选项卡
- HDU-5373 The shortest problem
- HDU 题目分类
- Java并发编程:CopyOnWrite容器的实现
- 使用图片作为a标签的点击按钮时,当触发touchstart的时候,往往会有一个灰色的背景,想要去掉的话可以用下面这种方式
- windows curl命令详解
- 文本输入框input text输入字母自动转大写
- 错误:软件包:3:docker-ce-18.09.4-3.el7.x86_64 (docker-ce-stable) 需要:container-selinux >;= 2.9
- mongo 高级操作
- phxpaxos实现状态机CAS操作
- boost.asio包装类st_asio_wrapper开发教程(一)
- 网站美化:CSS3自定义修改浏览器滚动条
- zabbix server is not running,the information dispalyed may not be current
- Qt5文件操作_保存成";UTF-8";格式
热门文章
- JS工程师的成长路径
- sizeof()计算
- Golang报错:Cannot convert expression of type interface{} to type []byte
- echarts设置横坐标的信息竖向排放
- 【转】STM32利用FATFS读写数组
- 【Nginx】使用certbot安装免费https证书使Nginx支持Https请求
- JVM存储位置分配——java中局部变量、实例变量和静态变量在方法区、栈内存、堆内存中的分配
- zabbix--自动注册
- 为什么要指定HashMap的容量?HashMap指定容量初始化后,底层Hash数组已经被分配内存了吗?
- FTPClient中使用completePendingCommand方法注意事项