springMVC中jackson的使用(包含JsonFormat 时间格式)
前台使用ajax,后台 springMVC
Java下常见的Json类库有Gson、JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换,下面给出一些Jackson的JSON操作方法。
jackson库作用:(1)在前台传的json格式的字符串格式数据,后台可以用相关的类,Map,List来接收(如果不用jackson库,但后台却使用了除string类型之外的类型来接收json格式数据,则后台报错 Content type 'application/json' not supported);
(2) 如果使用了jackson库,后台返回给前台的数据类型可以是Map,相关类,List等,JACKSON库会自动将类型转换为json字符串给前台,如果不使用,则会报 convert 错
一、准备工作
首先去官网下载Jackson工具包,下载地址http://wiki.fasterxml.com/JacksonDownload。Jackson有1.x系列和2.x系列,截止目前2.x系列的最新版本是2.2.3,2.x系列有3个jar包需要下载:
jackson-core-2.2.3.jar(核心jar包,下载地址)
jackson-annotations-2.2.3.jar(该包提供Json注解支持,下载地址)
jackson-databind-2.2.3.jar(下载地址)
- //JSON序列化和反序列化使用的User类
- import java.util.Date;
- public class User {
- private String name;
- private Integer age;
- private Date birthday;
- private String email;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Integer getAge() {
- return age;
- }
- public void setAge(Integer age) {
- this.age = age;
- }
- public Date getBirthday() {
- return birthday;
- }
- public void setBirthday(Date birthday) {
- this.birthday = birthday;
- }
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- }
二、JAVA对象转JSON[JSON序列化]
- import java.io.IOException;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import com.fasterxml.jackson.databind.ObjectMapper;
- public class JacksonDemo {
- public static void main(String[] args) throws ParseException, IOException {
- User user = new User();
- user.setName("小民");
- user.setEmail("xiaomin@sina.com");
- user.setAge(20);
- SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
- user.setBirthday(dateformat.parse("1996-10-01"));
- /**
- * ObjectMapper是JSON操作的核心,Jackson的所有JSON操作都是在ObjectMapper中实现。
- * ObjectMapper有多个JSON序列化的方法,可以把JSON字符串保存File、OutputStream等不同的介质中。
- * writeValue(File arg0, Object arg1)把arg1转成json序列,并保存到arg0文件中。
- * writeValue(OutputStream arg0, Object arg1)把arg1转成json序列,并保存到arg0输出流中。
- * writeValueAsBytes(Object arg0)把arg0转成json序列,并把结果输出成字节数组。
- * writeValueAsString(Object arg0)把arg0转成json序列,并把结果输出成字符串。
- */
- ObjectMapper mapper = new ObjectMapper();
- //User类转JSON
- //输出结果:{"name":"小民","age":20,"birthday":844099200000,"email":"xiaomin@sina.com"}
- String json = mapper.writeValueAsString(user);
- System.out.println(json);
- //Java集合转JSON
- //输出结果:[{"name":"小民","age":20,"birthday":844099200000,"email":"xiaomin@sina.com"}]
- List<User> users = new ArrayList<User>();
- users.add(user);
- String jsonlist = mapper.writeValueAsString(users);
- System.out.println(jsonlist);
- }
- }
三、JSON转Java类[JSON反序列化]
- import java.io.IOException;
- import java.text.ParseException;
- import com.fasterxml.jackson.databind.ObjectMapper;
- public class JacksonDemo {
- public static void main(String[] args) throws ParseException, IOException {
- String json = "{\"name\":\"小民\",\"age\":20,\"birthday\":844099200000,\"email\":\"xiaomin@sina.com\"}";
- /**
- * ObjectMapper支持从byte[]、File、InputStream、字符串等数据的JSON反序列化。
- */
- ObjectMapper mapper = new ObjectMapper();
- User user = mapper.readValue(json, User.class);
- System.out.println(user);
- }
- }
四、JSON注解(@JsonProperty 只在mapper.writeValueAsString(序列化) mapper.readValue(反序列化)有用)
Jackson提供了一系列注解,方便对JSON序列化和反序列化进行控制,下面介绍一些常用的注解。
@JsonIgnore 此注解用于属性上,作用是进行JSON操作时忽略该属性。
@JsonFormat 此注解用于属性上,作用是把Date类型直接转化为想要的格式,如@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")。
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") 加入timezone,解决时间慢8小时
- "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
- "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
- "EEE,ddMMMyyyyHH:mm:sszzz"
- "yyyy-MM-dd"
当实体中存在Date类型,但是json字符串中是字符串类型
pattern 只支持以上几种格式否则报错
@JsonProperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把trueName属性序列化为name,@JsonProperty("name")。
- import java.util.Date;
- import com.fasterxml.jackson.annotation.*;
- public class User {
- private String name;
- //不JSON序列化年龄属性
- @JsonIgnore
- private Integer age;
- //格式化日期属性
- @JsonFormat(pattern = "yyyy年MM月dd日")
- private Date birthday;
- //序列化email属性为mail
- @JsonProperty("mail")
- private String email;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Integer getAge() {
- return age;
- }
- public void setAge(Integer age) {
- this.age = age;
- }
- public Date getBirthday() {
- return birthday;
- }
- public void setBirthday(Date birthday) {
- this.birthday = birthday;
- }
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- }
- import java.io.IOException;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import com.fasterxml.jackson.databind.ObjectMapper;
- public class JacksonDemo {
- public static void main(String[] args) throws ParseException, IOException {
- User user = new User();
- user.setName("小民");
- user.setEmail("xiaomin@sina.com");
- user.setAge(20);
- SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
- user.setBirthday(dateformat.parse("1996-10-01"));
- ObjectMapper mapper = new ObjectMapper();
- String json = mapper.writeValueAsString(user);
- System.out.println(json);
- //输出结果:{"name":"小民","birthday":"1996年09月30日","mail":"xiaomin@sina.com"}
- }
- }
springMVC中jackson的使用(包含JsonFormat 时间格式)的更多相关文章
- SpringMVC中使用Ajax POST请求以json格式传递参数服务端通过request.getParameter("name")无法获取参数值问题分析
SpringMVC中使用Ajax POST请求以json格式传递参数服务端通过request.getParameter("name")无法获取参数值问题分析 一:问题demo展示 ...
- SpringCloud:feign默认jackson解析'yyyy-MM-ddTHH:mm:ssZ'时间格式报错
Feign默认的使用jackson解析,所以时间传值时会报错,时间格式错误 解决办法: 修改feign解析方式为fastjson方式: @Configuration public class CxfC ...
- ASP.Net 获取当前时间,包含各种时间格式
在c# / ASP.net中我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04).时间(12:12:12).日期+时间 ...
- golang中time包一个简单的时间格式输出
一.代码 package main import ( "fmt" "time" ) func main() { //"2006-01-02 15:04 ...
- C#中Newtonsoft.Json 序列化和反序列化 时间格式
步骤 引用 using Newtonsoft.Json; using Newtonsoft.Json.Converters; 格式配置 IsoDateTimeConverter timeFormat ...
- hive笔记:时间格式的统一
一.string类型,年月日部分包含的时间统一格式: 原数据格式(时间字段为string类型) 取数时间和格式的语法 2018-11-01 00:12:49.0 substr(regexp_repl ...
- 一起Polyfill系列:让Date识别ISO 8601日期时间格式
一.什么是ISO 8601日期时间格式 ISO 8601是国际标准化组织制定的日期时间表示规范,全称是<数据存储和交换形式·信息交换·日期和时间的表示方法>. 示例: 1. 2014-12 ...
- lua 特殊时间格式转换
[1]时间格式转换需求 工作中,因业务需要将时间格式进行转换.需求内容如下: 原格式:17:04:49.475 UTC Mon Mar 04 2019 转换格式:2019-03-04 17:04:4 ...
- SpringMVC使用@ResponseBody时返回json的日期格式及可能产生的问题
http://blog.csdn.net/z69183787/article/details/40375831 遇到的问题: 1 条件: 1.1.表单里有两个时间参数,都是作为隐藏项随表单一起提交: ...
随机推荐
- c# aop讲解
先说下场景,C#中为什么要使用Aop,而我又是在哪里使用Aop? 本人只是想拦截实体类的Set的方法,然后在Set之前,调用一下其它方法,把值赋给另一个对象. 而我做的都是在实体类的基类里处理: 比如 ...
- python zlib字符串压缩
在做网络程序时,可以对字符串进行压缩来节省带宽 项目中用到 {"compress": <压缩标记>, "result":[[设备类型.设备ID, 设 ...
- 1.1-1.4 hadoop调度框架和oozie概述
一.hadoop调度框架 Linux Crontab Azkaban https://azkaban.github.io/ Oozie http://oozie.apache.org/ Zeus(阿里 ...
- Eclipse+Maven+TestNg+ReportNg 生成测试报告
http://blog.csdn.net/a542551042/article/details/46729585
- HTML学习笔记(六)TCP/IP
TCP/IP 是供已连接因特网的计算机进行通信的通信协议. 在 TCP/IP 中包含一系列用于处理数据通信的协议: TCP (传输控制协议) - 应用程序之间通信 UDP (用户数据包协议) - 应用 ...
- Legacy C++ MongoDB Driver
https://docs.mongodb.com/ecosystem/drivers/cpp/
- 新版蜀山剑侠传3D立体格斗全方位剖析
国人终极格斗<蜀山剑侠传>,突破传统横版格斗"二次元"瓶颈,率先开辟3D立体横版格斗网游先河,实现"有纬度"的空间化立体式全景3D战斗体验!游戏大量 ...
- Django框架简介,wsgiref 与 jinja2 模块
目录 框架简介 wsgiref模块 jinja2 模块 框架简介 Django是一个web开发框架,用来开发web应用,本质就是, web框架+socket服务端 MVC框架和MTV框架 MVC,全名 ...
- 1.python真的是万恶之源么?(初识python)
python真的是万恶之源么? 计算机基础及puthon了解 1.计算机基础知识 cpu : 相当于人类大脑,运算和处理问题 内存 : 临时存储数据,单点就消失,4G,8G,16G,32G 硬盘 : ...
- RN初始化项目报错
解决方法:全局删除yarn