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格式的输入和输出相关推荐

  1. Spring MVC 学习笔记 对locale和theme的支持

    Spring MVC 学习笔记 对locale和theme的支持 Locale Spring MVC缺省使用AcceptHeaderLocaleResolver来根据request header中的 ...

  2. Spring MVC 学习笔记一 HelloWorld

    Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...

  3. Spring MVC 学习笔记(整理)

    SpringMVC学习 1.概述 Spring MVC是一种基于Java实现MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行解耦,基于请求-响应模型帮助我们 ...

  4. 【Spring MVC学习笔记 六】SpringMVC框架整合AJAX完成局部刷新

    本篇Blog介绍另一个常用的技术Ajax.虽然Ajax可以脱离SpringMVC去使用,但是SpringMVC对AJax有更好的支持 AJAX概念概述 AJAX即Asynchronous Javasc ...

  5. Spring MVC学习笔记

    文章目录 创建一个servlet项目 导入依赖 添加Web框架 编写Servlet 注册这个servlet 编写跳转页面 配置Tomcat 第一个Spring MVC程序 1. web.xml的配置 ...

  6. Spring MVC学习笔记——SiteMesh的使用(转)

    转自 SiteMesh的使用 SiteMesh的介绍就不多说了,主要是用来统一页面风格,减少重复编码的. 它定义了一个过滤器,然后把页面都加上统一的头部和底部. 需要先在WEB-INF/lib下引入s ...

  7. Spring MVC学习笔记(七)

    2019独角兽企业重金招聘Python工程师标准>>> 配置Spring MVC <?xml version="1.0" encoding="UT ...

  8. python学习笔记(5)—— 输入和输出

    文章目录 输入和输出(Input and output) 格式化输出(Fancier Output Formatting) 格式化字符串文字(Formatted String Literals) St ...

  9. Spring MVC学习笔记——POJO和DispatcherServlet

    POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称. 使用POJO名称是为了避免和EJB(Enter ...

最新文章

  1. 管理多供应商物联网项目的10个关键步骤
  2. java输入数据插入if_java编程,从键盘录入10个整数数据,将每次录入的数据按从小到大的顺序插入到数组中。...
  3. 从 Dagger 到 Hilt,谷歌为何执着于让我们用依赖注入?
  4. 任正非:未来是云时代,华为也要转向云战略
  5. bzoj1010 [HNOI2008]玩具装箱toy
  6. javascript 内存和连等赋值
  7. 7月30日PMP考试注意事项
  8. 近远场转换算法matlab,计算电磁学之FDTD算法的MATLAB语言实现解析.doc
  9. 解决qt.qpa.plugin: Could not load the Qt platform plugin “xcb“问题
  10. 面试中的常见架构设计题
  11. 抖音养号教程技巧,做抖音怎么养号上热门
  12. 农村配电设施存在的安全隐患及应采取的措施130637
  13. Java实现支付宝网页支付
  14. linux上使用drive从google drive 下载文件和文件夹
  15. 什么是sp,怎么运作,他们是怎么发财的
  16. mysql 从从(主主)复制(故障转移)
  17. 使用word文件制作ftl模板文件总结(靠谱)
  18. 基于单片机的升力检测仪系统设计
  19. 无Internet访问权限却可以上网
  20. 张磊大神的《深入剖析Kubernetes》终于出书啦!

热门文章

  1. SQLServer常见性能问题
  2. 使用Modernizr探测HTML5/CSS3新特性
  3. GHOST内部错误 36000(internal error 36000)情况的解决办法
  4. 2006世界杯赛程表,不能错过:)
  5. 从零开始的异世界生活
  6. Xtrabackup的“流”及“备份压缩”功能
  7. 从一个案例看系统优化
  8. 策略模式学习三---总结
  9. 性能调优:理解Set Statistics IO输出
  10. js中null和undefined