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),是 ...
随机推荐
- 简单的oracle sql语句练习
简单的oracle sql语句练习 求每个部门的平均薪水 select deptno,avg(sal) from emp group by deptno 每个部门同一个职位的最大工资 select d ...
- java 接口请求返回通用json
public class BaseResponseBody { // 不能添加属性 仅做泛型使用 } public class ResponseBase<T extends BaseRespon ...
- T-sql 行转列,数据库查询分页
1 USE [APS_Future_FT] 2 GO 3 /****** Object: StoredProcedure [dbo].[A_CrudePrice] Script Date: 2013/ ...
- Codeforces 1037 H. Security
\(>Codeforces \space 1037\ H. Security<\) 题目大意 : 有一个串 \(S\) ,\(q\) 组询问,每一次给出一个询问串 \(T\) 和一个区间 ...
- 51nod1648 洞 LCT
非常简单的一眼LCT,然而我没有在20min内码完,太失败了... 第一问,直接查根的前驱 第二问,查链的子树大小 复杂度$O((n + m) log n)$ #include <cstdio& ...
- WEB架构师成长之路 一
一 .你必须学习面向对象的基础知识 1.降低软件开发的复杂度 2.提高软件开发的效率 3.提高软件质量:可维护性,可扩展性,可重用性等. 提高软件质量:可维护性,可扩展性,可重用性等,再具体点,就是高 ...
- Linux下对拍程序
在程序对应文件夹下存为.sh文件 在终端命令中进入相应文件夹,用 sh XXX.sh 调用 while true; do ./datamaker>tmp.in ./baoli<tmp.in ...
- 线性DP POJ 1159 Palindrome
Palindrome Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 59101 Accepted: 20532 Desc ...
- c# -- 介绍File.AppendAllText 方法
下面介绍两个函数: File.AppendAllText (String, String) File.AppendAllText (String, String, String) File.Appen ...
- MySQL之thread cache
最近突然对MySQL的连接非常感兴趣,从status根据thread关键字可以查出如下是个状态 show global status like 'thread%'; +---------------- ...