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),是 ...
随机推荐
- [BZOJ5427]最长上升子序列
考虑O(n log n)的LIS求法,dp[i]表示到目前为止,长度为i的LIS的末尾最小是多少. 当当前数确定时直接用LIS的求法更新dp数组,当不确定时,由于这个数可以是任意数,所以可以接在任意上 ...
- JZYZOJ1540 BZOJ4035 [ haoi2015 上午] T3 博弈论 sg函数 分块 haoi
http://172.20.6.3/Problem_Show.asp?id=1540 之前莫比乌斯反演也写了一道这种找规律分块计算的题,没觉得这么恶心啊. 具体解释看代码. 翻硬币的具体方法就是分别算 ...
- 【洛谷】P1631: 序列合并
P1631 序列合并 题目描述 有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N2个和,求这N2个和中最小的N个. 输入输出格式 输入格式: 第一行一个正整数N: 第二行N个整数Ai ...
- [转]Intent和PendingIntent的区别
intent英文意思是意图,pending表示即将发生或来临的事情. PendingIntent这个类用于处理即将发生的事情.比如在通知Notification中用于跳转页面,但不是马上跳转. Int ...
- [转]关于Java对中文排序的问题
1 2 3 4 5 6 Comparator chinese_cmp = Collator.getInstance(Locale.CHINA); String[] strs = new ...
- centos安装openssl
1.跳转到文件下载目录 cd install-file 2.下载openssl安装文件 wget http://www.openssl.org/source/openssl-1.0.2a.tar.gz ...
- JAVA容器-浅谈HashMap的实现原理
概述 HashMap是通过数组+链表的方式实现的,由于HashMap的链表也是采用数组方式,我就修改直接利用LinkedList实现,简单模拟一下. 1.Key.Value的存取方式. 2.HashM ...
- Java性能优化的9大工具
在这篇文章中,我会带着大家一起看一下9个可以帮助我们优化Java性能的工具.有一些我们已经在IDR Solutions中使用了,而另外一些有可能在个人项目中使用. NetBeans Profiler ...
- Internationalization composition diagram
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdHJvdWJsZXNob290ZXI=/font/5a6L5L2T/fontsize/400/fill/I0 ...
- Spring MVC概述
Spring MVC框架是一个开源的Java平台,为开发强大的基于Java的Web应用程序提供全面的基础架构支持非常容易和非常快速. Spring框架最初由Rod Johnson撰写,并于2003年6 ...