很多时候前端都需要调用后台服务实现交互功能,常见的数据交换格式多是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>
&lt;head&gt;&lt;meta charset="UTF-8"&gt;&lt;title&gt;&lt;/title&gt;

<!–[if lte IE 8]>
<script type=“text/javascript” src="//res.wx.qq.com/a/wx_fed/webwx/res/json3.min.js"></script>
<![endif]–>
</head>

&lt;body&gt;&lt;script type="text/javascript"&gt;<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>&lt;/script&gt;
&lt;/body&gt;

</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

好文要顶 关注我 收藏该文

沧海一粟11
关注 - 67
粉丝 - 5

+加关注

0
0

« 上一篇:赛邮云通信
» 下一篇:springMVC对于Controller返回值的可选类型
 </div>

springMVC实现json 返回到页面相关推荐

  1. springboot返回html页面原理,SpringBoot返回html页面

    一般Controller返回数据或页面,今天谈一下返回页面的场景. 一.不使用template 1. controller中定义对应的访问路由及返回的页面(使用Controller,不要使用RestC ...

  2. SpringMVC:返回HTML页面

    [问题] 在webapp的WEB-INF下放入一个html,通过控制层Controller返回html报错(404).但是返回jsp页面却不会报错. [原因]静态的html访问不到,但是动态的jsp可 ...

  3. 一个SpringMVC接口能返回JSON又能返回XML? 安排!

    我们有一个接口服务为下游的系统提供数据服务,本来好好的大家都愉快地传递JSON,非常和谐.可最近有个新需求去对接一个很老的系统,这倒是不算啥,可这个老系统数据不是以JSON传递的而是以XML传递的. ...

  4. SpringMVC处理Json、文件上传、拦截器

    SpringMVC处理Json.文件上传.拦截器 : 处理JSON 链接 http://repo1.maven.org/maven2/com/fasterxml/jackson/core/ 步骤 编写 ...

  5. SpringMvc之Json全局异常处理

    目录 一. SpringMvc框架对Json数据的支持 1.    Json数据的格式分类: 2.  SpringMvc框架如何产生上述三种json格式数据 2.1导入pom依赖 2.2  在Spri ...

  6. springMVC 处理json 及 HttpMessageConverter 接口

    一.SpringMVC处理json的使用 1.添加依赖jar包 <dependency><groupId>com.fasterxml.jackson.core</grou ...

  7. SSM 返回静态页面HTML Controller 被递归调用引起的StackOverflowError

    一 背景 最近在做工程实践,想实现这么一个效果: 前端url请求地址:localhost:8080/idevtools/search 后端返回一个静态页面HTML:search.html 按照网上说的 ...

  8. Spring Mvc返回html页面404错误解决记录--转载

    原文地址:http://53873039oycg.iteye.com/blog/2061992 以前使用Spring Mvc时候都是返回jsp页面或者ftl页面,昨天想返回html页面,spring- ...

  9. SpringMVC关于json、xml自动转换的原理研究[附带源码分析 --转

    SpringMVC关于json.xml自动转换的原理研究[附带源码分析] 原文地址:http://www.cnblogs.com/fangjian0423/p/springMVC-xml-json-c ...

  10. 解决springmvc在单纯返回一个字符串对象时所出现的乱码情况(极速版)

    使用springmvc框架开发了这么长时间,之前都是直接返回jsp页面,乱码情况都是通过配置和手动编解码来解决,但是今天突然返回一段单纯的字符串时,发现中文乱码情况解决不了了,下面就给各位分享一下如何 ...

最新文章

  1. 破解Win2008口令-ERD6.0
  2. LeetCode 1108. Defanging an IP Address--C++,Python解法
  3. Scala入门与进阶(五)- Scala数组
  4. xp系统下访问的两个组策略设置
  5. 教你如果设置自己喜欢的QQ背景音乐
  6. MyEclipse设置选中单词其它同名单词前景色和背景色
  7. 3.QT中QCommandLineParser和QCommandLineOption解析命令行参数
  8. Fitness - 05.23
  9. 如此沙雕的代码注释,还是程序员会玩!
  10. python教程视频-Python系列视频(一)——Python语言基础
  11. Picture exceed the maximum allowable rotation range
  12. F2FS文件系统工具简介
  13. Context-Aware Patch Generation for Better Automated Program Repair -上下文感知补丁生成更好的自动化程序修复
  14. 点云匹配介绍与ICP算法
  15. 上海计算机三级怎么查,2013上海计算机三级成绩查询系统
  16. 游戏服务器更新文件,如何配置网吧游戏更新服务器
  17. coldfusion_在ColdFusion中建立动态菜单
  18. spring boot 中用到的thymeleaf (模板引擎)
  19. 17 重定向(Redirect) vs 转发(Forward)
  20. 斯坦福大学卷积神经网络----Module 1 Lesson 4 反向传播

热门文章

  1. redis-trib功能实现详解(转)
  2. 项目成本管理-案例分享
  3. Reciprocal Learning Networks for Human Trajectory Prediction
  4. java8 foreach 异常_在java 8流foreach中抛出异常
  5. 浙江大学计算机学院科研团队,科研团队
  6. 知群产品经理必修TOP班 学习笔记:电梯演讲和商业画布
  7. [Android]bp侧gerrit提交不上去时,删除编译生成的二进制文件
  8. 软件工程专业的大三学生经历和感悟
  9. python3实用编程技巧_你想要的Python编程技巧,我都给你整理好了
  10. java的简单逻辑博彩游戏craps