项目记事【SpringMVC-1】:后台接收前端传来的JSON,并转成对象
背景:
最近项目中使用SpringMVC,需要从前端接收JSON格式的请求,在后端自动转成一个与JSON格式相同的对象。
由于是一个老项目,Spring的版本是3.2.7。
问题:POST or GET
这个请求,是一个计算类型的请求,不涉及数据的修改,从意义上来说的角度应该是一个 GET 请求。
但是请求报文设计时要求高度的灵活性,传递的属性都是以 kind-value 形式,如:
{
"kind":"premium",
"value":"1000"
}
而不是传统的模式:
{
"premium":"1000"
}
所以报文的长度会显得非常的长。
以下是最初的后端 Controller 设计:
1 @Controller 2 @RequestMapping(value = "/PMS/Groovy") 3 public class GetGroovyValueController { 4 5 @RequestMapping(value = "/Discount", method = RequestMethod.POST) 6 @ResponseBody 7 public ResponseVO<String> getDiscount(LiabilityVO liabilityVO) { 8 // 具体代码不详述了 9 } 10 }
Controller
会出现一个和特殊的情况:
1. GET 请求接收的报文长度,根据浏览器的不同,是有限制的,而客户要求的 IE 浏览器所支持的长度有限。
2. 报文传递的 JSON 格式,与 LiabilityVO 这个模型是匹配的,但是数据并不能完整的传递到后台。(这种情况在使用第二种JSON格式的时候不会出现)
针对以上2个情况,研究出的解决方案如下:
1. 改用 POST 请求,这么做虽然与设计的意义有些违背,在安全性上考虑也略显欠缺,但是这是目前想到的最佳解决方案,在不改变模型的情况下。
2. 分别作出如下修改:
- AJAX 请求格式,增加 contentType: "application/json"。
- webmvc-config.xml 文件中 MappingJackson2HttpMessageConverter 的配置。
- Controller 中参数增加 @RequestBody注解。
话不多说,直接上代码:
1 @Controller 2 @RequestMapping(value = "/PMS/Groovy") 3 public class GetGroovyValueController { 4 5 @RequestMapping(value = "/Discount", method = RequestMethod.POST) 6 @ResponseBody 7 public ResponseVO<String> getDiscount(@RequestBody LiabilityVO liabilityVO) { 8 // 具体代码不详述了 9 } 10 }
Controller
1 <property name="messageConverters"> 2 <list> 3 <bean id="utf8StringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"> 4 <property name="supportedMediaTypes"> 5 <list> 6 <value>text/plain;charset=UTF-8</value> 7 </list> 8 </property> 9 </bean> 10 <bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 11 <!-- 解决 HttpMediaTypeNotAcceptableException: Could not find acceptable representation --> 12 <property name="supportedMediaTypes"> 13 <list> 14 <value>text/html;charset=UTF-8</value> 15 <!-- 以下2个是新增的 --> 16 <value>application/x-www-form-urlencoded;charset=UTF-8</value> 17 <value>application/json;charset=UTF-8</value> 18 </list> 19 </property> 20 </bean> 21 </list> 22 </property>
webmvc-config.xml
1 $.ajax({ 2 type: 'POST', 3 url: "${pageContext.request.contextPath}/PMS/Groovy/Discount.jspx", 4 data: JSON.stringify(str), 5 dataType: 'json', 6 contentType: "application/json", 7 cache: false, 8 success: function (res) { 9 10 }, 11 error: function (data) { 12 alert('失败'); 13 } 14 });
AJAX
Over,问题解决!
转载于:https://www.cnblogs.com/jing-an-feng-shao/p/7426091.html
项目记事【SpringMVC-1】:后台接收前端传来的JSON,并转成对象相关推荐
- php怎么传json数据_php怎么接收前端传来的json数据
php怎么接收前端传来的json数据php 如何接收前端传来的json数据 前端用JQ 生成一个有字段名和值格式的键值对 的JSON 格式的字串 转码后 提交给后台的PHP 处理 代码如下 json_ ...
- SpringBoot接收前端传来的json数据
当前端传来json数据时,后端有多种方式接收 前端json数据: {id:121, //数字name:"lhj", //字符串scoreList:[ //对象{Java:95}, ...
- 如何接收前端传来的json数据
我是小康小白,一个平平无奇的Java小白.热爱有趣的文字,生活和远方. 从前端获取json格式包的数据,而不是仅仅通过参数来获得 1.第一种使用使用IOUtils的读取包方式 但这种方法需要jar包 ...
- Java如何处理前端传来的json格式的数据并将它转化为相应的对象,然后进行使用
我是小康小白,一个平平无奇的Java小白.热爱有趣的文字,生活和远方. 前端传来json格式的数据传递而来,如何处理json格式的数据,如何将其转化为对象方便进行操作,并在Servlet页面中将数据以 ...
- SpringMVC获取前端传来的json数据的四种方法(前后端json交互总结)
一.导包 一定要有 Jackson 的jar包依赖,就算有了fastjson,也要有Jackson包 <dependency><groupId>com.fasterxml.ja ...
- java后端接收前端传来的String数组
我们来看下面一段代码,我们需要接收前端传来的String字符数组:我们来模拟下错误传参: @PostMapping("/getStrArray")public ResponseMe ...
- Springboot后台接收前端Date类型
From: https://my.oschina.net/zicheng/blog/2963117 这个问题不是专门针对Springboot的,Springmvc也同样适用于这一个问题. 昨的是Spr ...
- Java如何接收前端传来的多层嵌套的复杂json串
想看问题直接解决方式,直接拉到博文底部. Spring的controller在接收前端传参的时候如果参数使用@RequestBody标注的时候 @RequestBody 则会把前端参数转为JSON的形 ...
- SpringBoot无法接收到前端传来的json数据
如果是get请求,看Controller接收前端数据的dto有没有@Validated @RequestMapping(value = "/update")@ResponseBod ...
- hph中将前端接收的数据由json格式转成array
//接收前端的数据 $postData储存前端传来的数据 $postData = file_get_contents("php://input"); echo $postDa ...
最新文章
- 区块链和智能合约的关系
- 达达O2O后台架构演进实践:从0到4000高并发请求背后的努力!
- java实践源码--哈弗曼树
- X509Certificate2 本地正常,放到线上内部错误
- Linux ALSA声卡驱动之四:Control设备的创建
- java面向对象内存分析
- 在C语言中如何高效地复制和连接字符串?
- 编程语言python入门-Python基础教程 - 全文
- 74LS系列芯片简记——10-19
- VS2017社区版+OpenCV3.4.10配置
- 后盾人tp5教程_5个出色的应用程序以开放数据为后盾
- 华为云用docker部署halo
- 强烈推荐的程序员键盘--红轴手感好按键压力小写代码更轻松
- html5实现canvas迷宫游戏,HTML5/Canvas/JS 迷宫生成动画
- 单片机小精灵(延时、定时计算软件)
- 教你在WORD中如何制作三线表
- iOS获取APP在苹果App Store中的最新版本信息
- 基于嵌入式技术的网络视频监控系统
- 我们正处于并将长期处于从“艺工交叉”到“自我创造”的过渡阶段
- 英国访问学者签证材料要求