Jackson 练习(一)
package com.yc.model; /**
* 班级
* @author Administrator
*
*/
public class ClassModel { private String classCode;
private String className; public String getClassCode() {
return classCode;
} public void setClassCode(String classCode) {
this.classCode = classCode;
} public String getClassName() {
return className;
} public void setClassName(String className) {
this.className = className;
} }
package com.yc.model; import java.util.Date; /**
* 学生表
* @author WUYF
*
*/
public class StudentModel {
private String classCode;
private String stuCode;
private String stuName;
private Integer stuAge;
private Date stuBirthday = new Date(); public String getClassCode() {
return classCode;
} public void setClassCode(String classCode) {
this.classCode = classCode;
} public String getStuCode() {
return stuCode;
} public void setStuCode(String stuCode) {
this.stuCode = stuCode;
} public String getStuName() {
return stuName;
} public void setStuName(String stuName) {
this.stuName = stuName;
} public Integer getStuAge() {
return stuAge;
} public void setStuAge(Integer stuAge) {
this.stuAge = stuAge;
} public Date getStuBirthday() {
return stuBirthday;
} public void setStuBirthday(Date stuBirthday) {
this.stuBirthday = stuBirthday;
} }
package com.yc.model; import java.util.Set; /**
* 班级信息
* @author Administrator
*
*/
public class ClassInfo { private ClassModel classModel;
private Set<StudentModel> studentModelList; public ClassModel getClassModel() {
return classModel;
} public void setClassModel(ClassModel classModel) {
this.classModel = classModel;
} public Set<StudentModel> getStudentModelList() {
return studentModelList;
} public void setStudentModelList(Set<StudentModel> studentModelList) {
this.studentModelList = studentModelList;
} }
package com.yc.test; import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set; import javax.naming.InitialContext; import com.fasterxml.jackson.core.JsonEncoding;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yc.model.ClassInfo;
import com.yc.model.ClassModel;
import com.yc.model.StudentModel; @SuppressWarnings("unused")
public class jacksonTest { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
init();
doTest();
testJsonGenerate();
} /******************** 变量定义 ************************/
private static ObjectMapper jsonMapper = new ObjectMapper();
private static ClassInfo classInfo = new ClassInfo(); private static JsonGenerator jsonGenerator = null; /******************** 初始化 **************************/
private static void init()
{
classInfo.setStudentModelList(new HashSet<StudentModel>());
// 班级数据初骀化
ClassModel classModel = new ClassModel();
classModel.setClassCode("001");
classModel.setClassName("计0312班"); classInfo.setClassModel(classModel); // 学生数据初始化
for(Integer i= 1; i<5;i++)
{
StudentModel studentModel = new StudentModel();
studentModel.setClassCode(classModel.getClassCode());
studentModel.setStuCode("00" + i.toString());
studentModel.setStuName("学生_" + studentModel.getStuCode());
studentModel.setStuAge(18 + i); classInfo.getStudentModelList().add(studentModel);
} System.out.println(classInfo); } /******************** 测试主体 **************************/ private static void testJsonGenerate()
{
try {
jsonGenerator = jsonMapper.getFactory().createGenerator(System.out,JsonEncoding.UTF8); jsonGenerator.writeObject(classInfo); jsonGenerator.flush();
jsonGenerator.close(); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } /**
* @throws IOException
*
*/
private static void doTest()
{
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); jsonMapper.setDateFormat(dateFormat); ClassInfo classInfoTmp = new ClassInfo(); String classInfoJsonString = jsonMapper.writeValueAsString(classInfo);
System.out.println("classInfoJsonString:");
System.out.println(classInfoJsonString); classInfoTmp = jsonMapper.readValue(classInfoJsonString, ClassInfo.class); String classInfoJsonTmpString = jsonMapper.writeValueAsString(classInfoTmp);
System.out.println("classInfoJsonTmpString:");
System.out.println(classInfoJsonTmpString); } catch (JsonProcessingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
另外 可以在字段属性上增加 注解来实现自定义日期格式
使用Jackson时转换JSON时,日期格式设置
近日,使用Jackson转化JSON对象的时候,显示的时候,日期始终显示不正确,输出的日期是一串数字代表的时间戳,不符合要求,所以想到Jackson应当有方法设置输出的日期格式。后来一查果然有两种方式来实现:
1.普通的方式:
默认是转成timestamps形式的,通过下面方式可以取消timestamps。
objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
这样将使时间生成使用所谓的use a [ISO-8601 ]-compliant notation, 输出类似如下格式的时间: "1970-01-01T00:00:00.000+0000".
当然也可以自定义输出格式:
objectMapper.getSerializationConfig().setDateFormat(myDateFormat);
myDateFormat对象为java.text.DateFormat,具体使用清查java API
2.annotaion的注释方式:
先定义自己需要的格式,例如:
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.SerializerProvider; /**
* java日期对象经过Jackson库转换成JSON日期格式化自定义类
* @author godfox
* @date 2010-5-3
*/
public class CustomDateSerializer extends JsonSerializer<Date> { @Override
public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String formattedDate = formatter.format(value);
jgen.writeString(formattedDate);
}
}
然后在你的POJO上找到日期的get方法
@JsonSerialize(using = CustomDateSerializer.class)
public Date getCreateAt() {
return createAt;
}
// 反序列化 成 javabean
ObjectMapper jsonMapper = new ObjectMapper();
rtnResult = jsonMapper.writeValueAsString(invoiceDtos); List<InvoiceDetail> deJson = (List<InvoiceDetail>)jsonMapper.readValue(rtnResult, new TypeReference<List<InvoiceDetail>>() {});
Jackson 练习(一)的更多相关文章
- jackson简单使用,对象转json,json转对象,json转list
添加jackson依赖: // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core compile g ...
- Jackson 通过自定义注解来控制json key的格式
Jackson 通过自定义注解来控制json key的格式 最近我这边有一个需求就是需要把Bean中的某一些特殊字段的值进行替换.而这个替换过程是需要依赖一个第三方的dubbo服务的.为了使得这个转换 ...
- Jackson的简单用法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1简介 Jackson具有比较高的序列化和反序列化效率,据测试,无论是 ...
- jackson error 含义log
1. 反序列化失败,类型不匹配 Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserial ize ...
- jackson annotations注解详解
jackson中常用到的注解 猛击下面的连接地址 http://blog.csdn.net/sdyy321/article/details/40298081
- jackson官方快速入门文档
官方地址: http://jackson.codehaus.org/ http://wiki.fasterxml.com/JacksonInFiveMinutes http://wiki.faster ...
- Jackson将json字符串转换成泛型List
Jackson,我感觉是在Java与Json之间相互转换的最快速的框架,当然Google的Gson也很不错,但是参照网上有人的性能测试,看起来还是Jackson比较快一点 Jackson处理一般的Ja ...
- 使用Jackson解析Json示例
原文http://blog.csdn.net/gebitan505/article/details/17005735 custom.json: { "country":&q ...
- Json解析工具Jackson(使用注解)
原文http://blog.csdn.net/nomousewch/article/details/8955796 接上一篇文章Json解析工具Jackson(简单应用),jackson在实际应用中给 ...
- Json解析工具Jackson(简单应用)
原文http://blog.csdn.net/nomousewch/article/details/8955796 概述 Jackson库(http://jackson.codehaus.org),是 ...
随机推荐
- CentOS 7中Nginx1.9.5编译安装教程systemctl启动
先安装gcc 等 yum -y install gcc gcc-c++ wget 复制代码 .然后装一些库 yum -y install gcc wget automake autoconf libt ...
- 为什么主引导记录的内存地址是0x7C00?
转自:http://www.ruanyifeng.com/blog/2015/09/0x7c00.html 当时,搭配的操作系统是86-DOS.这个操作系统需要的内存最少是32KB.我们知道,内存地址 ...
- NBUT 1221 Intermediary
最短路,三进制状态压缩. $dis[i][j]$表示到$i$节点,每个中介用了几次的情况下的最小花费,跑最短路即可. #include<cstdio> #include<cstrin ...
- 洛谷P3919 【模板】可持久化数组 [主席树]
题目传送门 可持久化数组 题目描述 如题,你需要维护这样的一个长度为 $N$ 的数组,支持如下几种操作 在某个历史版本上修改某一个位置上的值 访问某个历史版本上的某一位置的值 此外,每进行一次操作(对 ...
- 「SCOI2014」方伯伯的商场之旅
「SCOI2014」方伯伯的商场之旅 题目描述 方伯伯有一天去参加一个商场举办的游戏.商场派了一些工作人员排成一行.每个人面前有几堆石子.说来也巧,位置在 \(i\) 的人面前的第 \(j\) 堆的石 ...
- [ZROI #316] ZYB玩字符串
Introduction 每次在一开始为空的串$S$的任意位置插入串$p$ 给出最终的$S$,求长度最短(相同时字典序最小)的串$p$ Solution: 样例出锅差评啊,让我这种直接看样例选手挂掉5 ...
- 【可持久化并查集】BZOJ3673-可持久化并查集 by zky
颓了十多天别问我再干嘛,在补学校作业 啊,开学了……我的夏天…… [题目大意] n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b ...
- [NC13A]反蝴蝶效应/[SPOJ-NPC2014D]General Joke
[NC13A]反蝴蝶效应/[SPOJ-NPC2014D]General Joke 题目大意: 按顺序访问\(A_{1\sim n}(n\le10^5)\),经过\(A_i\)时身上必须有\(A_i\) ...
- 某DP题目1
题意: 有n个由左右括号组成的字符串,选择其中若干字符串,使得组成的括号序列合法且长度最长.n <= 1000,n个字符串的长度和 <= 10000. 分析: 其实我一开始做这一题的时候, ...
- 厄拉多塞筛法和普通方法求素数表(python实现)
厄拉多赛筛法(sieve of Eratosthenes): 想要得到一个不大于N的数所有素数,可以先找到不超过根号N的所有素数,设2 = p1 < p2 < ......<pk ≤ ...