springMVC实现json 返回到页面
很多时候前端都需要调用后台服务实现交互功能,常见的数据交换格式多是JSON或XML,这里主要讲解Spring MVC为前端提供JSON格式的数据并实现与前台交互。
一、概要
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
在 JS 语言中,一切都是对象。因此,任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型。
(1)要实现从对象转换为 JSON 字符串,使用 JSON.stringify() 方法:
var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}'
(2)要实现从 JSON 转换为对象,使用 JSON.parse() 方法:
var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //结果是 {a: 'Hello', b: 'World'}
示例:
<!DOCTYPE html> <html>
<head><meta charset="UTF-8"><title></title>
<!–[if lte IE 8]>
<script type=“text/javascript” src="//res.wx.qq.com/a/wx_fed/webwx/res/json3.min.js"></script>
<![endif]–>
</head>
<body><script type="text/javascript"><span style="color: #008000">//</span><span style="color: #008000">js对象</span>var user =<span style="color: #000000"> {</span>"name": "张学友"<span style="color: #000000">,</span>"address": "中国香港"<span style="color: #000000">};</span><span style="color: #008000">//</span><span style="color: #008000">将对象转换成字符</span>var str =<span style="color: #000000"> JSON.stringify(user);alert(str);</span><span style="color: #008000">//</span><span style="color: #008000">将字符串转换成json对象</span>var zxy =<span style="color: #000000"> JSON.parse(str);alert(zxy.name </span>+ "," +<span style="color: #000000"> zxy.address);</span></script>
</body>
</html>
View Code
运行结果:
二、使用ModelAndView
pom.xml添加对jackson的依赖
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.2</version></dependency>
View Code
在user控制器中添加一个action
@RequestMapping(value = "/users")public ModelAndView users(){ModelAndView mav=new ModelAndView(new MappingJackson2JsonView());mav.addObject(userService.queryAllUsers());return mav;}
View Code
运行结果:
三、使用@ResponseBody与Jackson
修改pom.xml添加对jackson的依赖
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.2</version></dependency>
View Code
添加一个action,使用注解@ResponseBody,响应主体而不是路径
@RequestMapping(value = "/userJson",produces = "application/json;charset=utf-8")@ResponseBodypublic String userJson(){ObjectMapper mapper=new ObjectMapper();try {return mapper.writeValueAsString(userService.queryAllUsers());} catch (JsonProcessingException e) {e.printStackTrace();}return null;}
View Code
运行结果:
四、乱码问题
(1)方法一:在action上声明编码格式
@RequestMapping(path="/json",produces = "application/json;charset=UTF-8")
View Code
(2)方法二:修改spring配置文件
上一种方法比较麻烦,如果项目中有许多action则每一个都要添加,可以通过Spring配置统一指定
<mvc:annotation-driven><mvc:message-converters register-defaults="true"><bean class="org.springframework.http.converter.StringHttpMessageConverter"><constructor-arg value="UTF-8"/></bean><bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><property name="objectMapper"><bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"><property name="failOnEmptyBeans" value="false"/></bean></property></bean></mvc:message-converters> </mvc:annotation-driven>
View Code
五、日期格式化问题
默认日期格式会变成一个数字,是1970年1月1日到当前日期的毫秒数:
Jackson 默认是转成timestamps形式
(1)方法一:注解字段
在实体字段上使用@JsonFormat注解格式化日期
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
代码:
/*** 出生日期*/@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")private Date birthday;
View Code
运行结果:
(2)方法二:取消timestamps形式
如果只取消则会得到一个默认的日期格式,效果如下:
当然自定义输出格式是允许的
@RequestMapping(value = "/userJson",produces = "application/json;charset=utf-8")@ResponseBodypublic String userJson(){ObjectMapper mapper=new ObjectMapper();//不使用时间差的方式mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
</span><span style="color: #008000">//</span><span style="color: #008000">自定义日期格式对象</span>SimpleDateFormat sdf = <span style="color: #0000ff">new</span> SimpleDateFormat("yyyy-MM-dd HH:mm:ss"<span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">指定日期格式</span>
mapper.setDateFormat(sdf);
try {
return mapper.writeValueAsString(userService.queryAllUsers());
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
View Code
运行结果:
六、工具类
工具类可以复用代码,提高开发效率,如上文中的序列化JSON:
package com.zhangguo.springmvc08.utils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import java.text.SimpleDateFormat;
/**
JSON工具类,辅助类
*/
public class JsonUtil {
public static String getJson(Object object) {
return getJson(object,“yyyy-MM-dd HH:mm:ss”);
}public static String getJson(Object object,String dateFormat) {
ObjectMapper mapper = new ObjectMapper();
//不使用时间差的方式
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
//自定义日期格式对象
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
//指定日期格式
mapper.setDateFormat(sdf);
try {
return mapper.writeValueAsString(object);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
}
View Code
调用:
@RequestMapping(value = "/userJson",produces = "application/json;charset=utf-8")@ResponseBodypublic String userJson(){return JsonUtil.getJson(userService.queryAllUsers(),"yyyy-MM-dd");}
View Code
关注 - 67
粉丝 - 5
» 下一篇:springMVC对于Controller返回值的可选类型
</div>
springMVC实现json 返回到页面相关推荐
- springboot返回html页面原理,SpringBoot返回html页面
一般Controller返回数据或页面,今天谈一下返回页面的场景. 一.不使用template 1. controller中定义对应的访问路由及返回的页面(使用Controller,不要使用RestC ...
- SpringMVC:返回HTML页面
[问题] 在webapp的WEB-INF下放入一个html,通过控制层Controller返回html报错(404).但是返回jsp页面却不会报错. [原因]静态的html访问不到,但是动态的jsp可 ...
- 一个SpringMVC接口能返回JSON又能返回XML? 安排!
我们有一个接口服务为下游的系统提供数据服务,本来好好的大家都愉快地传递JSON,非常和谐.可最近有个新需求去对接一个很老的系统,这倒是不算啥,可这个老系统数据不是以JSON传递的而是以XML传递的. ...
- SpringMVC处理Json、文件上传、拦截器
SpringMVC处理Json.文件上传.拦截器 : 处理JSON 链接 http://repo1.maven.org/maven2/com/fasterxml/jackson/core/ 步骤 编写 ...
- SpringMvc之Json全局异常处理
目录 一. SpringMvc框架对Json数据的支持 1. Json数据的格式分类: 2. SpringMvc框架如何产生上述三种json格式数据 2.1导入pom依赖 2.2 在Spri ...
- springMVC 处理json 及 HttpMessageConverter 接口
一.SpringMVC处理json的使用 1.添加依赖jar包 <dependency><groupId>com.fasterxml.jackson.core</grou ...
- SSM 返回静态页面HTML Controller 被递归调用引起的StackOverflowError
一 背景 最近在做工程实践,想实现这么一个效果: 前端url请求地址:localhost:8080/idevtools/search 后端返回一个静态页面HTML:search.html 按照网上说的 ...
- Spring Mvc返回html页面404错误解决记录--转载
原文地址:http://53873039oycg.iteye.com/blog/2061992 以前使用Spring Mvc时候都是返回jsp页面或者ftl页面,昨天想返回html页面,spring- ...
- SpringMVC关于json、xml自动转换的原理研究[附带源码分析 --转
SpringMVC关于json.xml自动转换的原理研究[附带源码分析] 原文地址:http://www.cnblogs.com/fangjian0423/p/springMVC-xml-json-c ...
- 解决springmvc在单纯返回一个字符串对象时所出现的乱码情况(极速版)
使用springmvc框架开发了这么长时间,之前都是直接返回jsp页面,乱码情况都是通过配置和手动编解码来解决,但是今天突然返回一段单纯的字符串时,发现中文乱码情况解决不了了,下面就给各位分享一下如何 ...
最新文章
- 破解Win2008口令-ERD6.0
- LeetCode 1108. Defanging an IP Address--C++,Python解法
- Scala入门与进阶(五)- Scala数组
- xp系统下访问的两个组策略设置
- 教你如果设置自己喜欢的QQ背景音乐
- MyEclipse设置选中单词其它同名单词前景色和背景色
- 3.QT中QCommandLineParser和QCommandLineOption解析命令行参数
- Fitness - 05.23
- 如此沙雕的代码注释,还是程序员会玩!
- python教程视频-Python系列视频(一)——Python语言基础
- Picture exceed the maximum allowable rotation range
- F2FS文件系统工具简介
- Context-Aware Patch Generation for Better Automated Program Repair -上下文感知补丁生成更好的自动化程序修复
- 点云匹配介绍与ICP算法
- 上海计算机三级怎么查,2013上海计算机三级成绩查询系统
- 游戏服务器更新文件,如何配置网吧游戏更新服务器
- coldfusion_在ColdFusion中建立动态菜单
- spring boot 中用到的thymeleaf (模板引擎)
- 17 重定向(Redirect) vs 转发(Forward)
- 斯坦福大学卷积神经网络----Module 1 Lesson 4 反向传播
热门文章
- redis-trib功能实现详解(转)
- 项目成本管理-案例分享
- Reciprocal Learning Networks for Human Trajectory Prediction
- java8 foreach 异常_在java 8流foreach中抛出异常
- 浙江大学计算机学院科研团队,科研团队
- 知群产品经理必修TOP班 学习笔记:电梯演讲和商业画布
- [Android]bp侧gerrit提交不上去时,删除编译生成的二进制文件
- 软件工程专业的大三学生经历和感悟
- python3实用编程技巧_你想要的Python编程技巧,我都给你整理好了
- java的简单逻辑博彩游戏craps