Spring MVC 学习笔记 json格式的输入和输出
Spring mvc处理json需要使用jackson的类库,因此为支持json格式的输入输出需要先修改pom.xml增加jackson包的引用
<!-- json --><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-core-lgpl</artifactId><version>1.8.1</version></dependency><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-lgpl</artifactId><version>1.8.1</version></dependency>
先修改之前的helloworld.jsp,增加客户端json格式的数据输入。
var cfg = {type: 'POST', data: JSON.stringify({userName:'winzip',password:'password',mobileNO:'13818881888'}), dataType: 'json',contentType:'application/json;charset=UTF-8', success: function(result) { alert(result.success); } };function doTestJson(actionName){cfg.url = actionName;$.ajax(cfg); }
根据前面的分析,在spring mvc中解析输入为json格式的数据有两种方式 1:使用@RequestBody来设置输入
@RequestMapping("/json1")@ResponseBodypublic JsonResult testJson1(@RequestBody User u){log.info("get json input from request body annotation");log.info(u.getUserName());return new JsonResult(true,"return ok"); }
2:使用HttpEntity来实现输入绑定
@RequestMapping("/json2") public ResponseEntity<JsonResult> testJson2(HttpEntity<User> u){log.info("get json input from HttpEntity annotation");log.info(u.getBody().getUserName());ResponseEntity<JsonResult> responseResult = new ResponseEntity<JsonResult>( new JsonResult(true,"return ok"),HttpStatus.OK);return responseResult; }
Json格式的输出也对应有两种方式 1:使用@responseBody来设置输出内容为context body 2:返回值设置为ResponseEntity<?>类型,以返回context body 另外,第三种方式是使用ContentNegotiatingViewResolver来设置输出为json格式,需要修改servlet context配置文件如下
<beanclass="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"><property name="order" value="1" /><property name="mediaTypes"><map><entry key="json" value="application/json" /></map></property><property name="defaultViews"><list><beanclass="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /></list></property><property name="ignoreAcceptHeader" value="true" /></bean>
但这种格式的输出会返回{model类名:{内容}} 的json格式, 例如,以下代码
@RequestMapping("/json3.json")public JsonResult testJson3(@RequestBody User u){log.info("handle json output from ContentNegotiatingViewResolver");return new JsonResult(true,"return ok");}
期望的返回是 {success:true,message:”return ok”}; 但实际返回的却是 {"jsonResult":{"success":true,"msg":"return ok"}} 原因是MappingJacksonJsonView中对返回值的处理未考虑modelMap中只有一个值的情况,直接是按照mapName:{mapResult}的格式来返回数据的。 修改方法,重载MappingJacksonJsonView类并重写filterModel方法如下
protected Object filterModel(Map<String, Object> model) { Map<?, ?> result = (Map<?, ?>) super.filterModel(model); if (result.size() == 1) { return result.values().iterator().next(); } else { return result; } }
对应的ContentNegotiatingViewResolver修改如下
<beanclass="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"><property name="order" value="1" /><property name="mediaTypes"><map><entry key="json" value="application/json" /></map></property><property name="defaultViews"><list><beanclass="net.zhepu.json.MappingJacksonJsonView" /></list></property><property name="ignoreAcceptHeader" value="true" /></bean>
转载于:https://www.cnblogs.com/zhujiabin/p/5125972.html
Spring MVC 学习笔记 json格式的输入和输出相关推荐
- Spring MVC 学习笔记 对locale和theme的支持
Spring MVC 学习笔记 对locale和theme的支持 Locale Spring MVC缺省使用AcceptHeaderLocaleResolver来根据request header中的 ...
- Spring MVC 学习笔记一 HelloWorld
Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...
- Spring MVC 学习笔记(整理)
SpringMVC学习 1.概述 Spring MVC是一种基于Java实现MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行解耦,基于请求-响应模型帮助我们 ...
- 【Spring MVC学习笔记 六】SpringMVC框架整合AJAX完成局部刷新
本篇Blog介绍另一个常用的技术Ajax.虽然Ajax可以脱离SpringMVC去使用,但是SpringMVC对AJax有更好的支持 AJAX概念概述 AJAX即Asynchronous Javasc ...
- Spring MVC学习笔记
文章目录 创建一个servlet项目 导入依赖 添加Web框架 编写Servlet 注册这个servlet 编写跳转页面 配置Tomcat 第一个Spring MVC程序 1. web.xml的配置 ...
- Spring MVC学习笔记——SiteMesh的使用(转)
转自 SiteMesh的使用 SiteMesh的介绍就不多说了,主要是用来统一页面风格,减少重复编码的. 它定义了一个过滤器,然后把页面都加上统一的头部和底部. 需要先在WEB-INF/lib下引入s ...
- Spring MVC学习笔记(七)
2019独角兽企业重金招聘Python工程师标准>>> 配置Spring MVC <?xml version="1.0" encoding="UT ...
- python学习笔记(5)—— 输入和输出
文章目录 输入和输出(Input and output) 格式化输出(Fancier Output Formatting) 格式化字符串文字(Formatted String Literals) St ...
- Spring MVC学习笔记——POJO和DispatcherServlet
POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称. 使用POJO名称是为了避免和EJB(Enter ...
最新文章
- 管理多供应商物联网项目的10个关键步骤
- java输入数据插入if_java编程,从键盘录入10个整数数据,将每次录入的数据按从小到大的顺序插入到数组中。...
- 从 Dagger 到 Hilt,谷歌为何执着于让我们用依赖注入?
- 任正非:未来是云时代,华为也要转向云战略
- bzoj1010 [HNOI2008]玩具装箱toy
- javascript 内存和连等赋值
- 7月30日PMP考试注意事项
- 近远场转换算法matlab,计算电磁学之FDTD算法的MATLAB语言实现解析.doc
- 解决qt.qpa.plugin: Could not load the Qt platform plugin “xcb“问题
- 面试中的常见架构设计题
- 抖音养号教程技巧,做抖音怎么养号上热门
- 农村配电设施存在的安全隐患及应采取的措施130637
- Java实现支付宝网页支付
- linux上使用drive从google drive 下载文件和文件夹
- 什么是sp,怎么运作,他们是怎么发财的
- mysql 从从(主主)复制(故障转移)
- 使用word文件制作ftl模板文件总结(靠谱)
- 基于单片机的升力检测仪系统设计
- 无Internet访问权限却可以上网
- 张磊大神的《深入剖析Kubernetes》终于出书啦!