
项目记事【SpringMVC-1】:后台接收前端传来的JSON,并转成对象
Controller Controller webmvc-config.xml AJAX
发布日期:2021-05-09 03:59:04
浏览次数:11
分类:博客文章
本文共 2455 字,大约阅读时间需要 8 分钟。
背景:
最近项目中使用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 ResponseVOgetDiscount(LiabilityVO liabilityVO) { 8 // 具体代码不详述了 9 }10 }
会出现一个和特殊的情况:
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 ResponseVOgetDiscount(@RequestBody LiabilityVO liabilityVO) { 8 // 具体代码不详述了 9 }10 }
12 3
224 105 96
8text/plain;charset=UTF-8 711 12 2113 2014
19text/html;charset=UTF-8 15 16application/x-www-form-urlencoded;charset=UTF-8 17application/json;charset=UTF-8 18
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 });
Over,问题解决!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年03月31日 02时14分13秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
vimscript学习笔记(二)预备知识
2019-03-05
Android数据库
2019-03-05
HTML基础,块级元素/行内元素/行内块元素辨析【2分钟掌握】
2019-03-05
23种设计模式一:单例模式
2019-03-05
三层框架+sql server数据库 实战教学-徐新帅-专题视频课程
2019-03-05
【单片机开发】智能小车工程(经验总结)
2019-03-05
【单片机开发】基于stm32的掌上游戏机设计 (项目规划)
2019-03-05
C++&&STL
2019-03-05
微信js-sdk使用简述(分享,扫码功能等)
2019-03-05
基于单片机简易脉搏测量仪系统设计-毕设课设资料
2019-03-05
Javascript中String支持使用正则表达式的四种方法
2019-03-05
Servlet2.5的增删改查功能分析与实现------删除功能(四)
2019-03-05
spring启动错误:Could not resolve placeholder
2019-03-05
invalid byte sequence for encoding
2019-03-05
技术美术面试问题整理
2019-03-05
ORB-SLAM2:LoopClosing线程学习随笔【李哈哈:看看总有收获篇】
2019-03-05
js求阶乘
2019-03-05
python-day3 for语句完整使用
2019-03-05