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),是 ...
随机推荐
- BOM知识整理
1.窗口位置: 1-1.window,screenLeft获取窗口距离屏幕左边的距离 1-2.window.screenTop获取窗口距离屏幕顶端的距离 1-3.window.screenX和wind ...
- flutter android沉浸式状态栏
import 'package:flutter/services.dart'; import 'dart:io'; class _MyAppState extends State<MyApp&g ...
- CodeForcs 797E Array Queries
$dp$预处理,暴力. 如果$k > sqrt(n)$,那么答案不会超过$sqrt(n)$,暴力模拟即可.如果$k <= sqrt(n)$,那么可以$dp$预处理打表. #include ...
- zookpeer应用和zkclient实践
分布式 zkclient 排它锁 在需要获取排它锁时,通过调用create()接口,创建临时子节点.zk会保证在所有客户端中,只有一个会创建成功,从而获取锁. 其他客户端注册该节点的变更watch监听 ...
- Java常用工具类之压缩解压
package com.wazn.learn.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream ...
- 11.6八校联考T1,T2题解
因为版权问题,不丢题面,不放代码了(出题人姓名也隐藏) T1 这,是一道,DP题,但是我最开始看的时候,我思路挂了,以为是一道简单题,然后就写错了 后来,我正确理解题意后写了个dfs,幸亏没有记忆化, ...
- 我的OI生涯 第三章
第三章 日子过得就像那些不眠的晚上,她嚼着口香糖对墙满谈着理想.——————赵雷<成都> NOIP过后我认识到了自己有多么菜,我换了座,到了靠窗户那排. 大王开始给我们介绍一些高端算法,那 ...
- 【UOJ244】[UER7]短路
[题目大意] (2n+1)*(2n+1)的矩形,由里到外每一层都有一个相同的值.问从左上走到右小经过的点累和的最小值. [思路] 一眼就是贪心.首先能够想到的是,权值最小的那些边要尽可能夺走,所以必定 ...
- Java创建线程的三种主要方式
Java创建线程的主要方式 一.继承Thread类创建 通过继承Thread并且重写其run(),run方法中即线程执行任务.创建后的子类通过调用 start() 方法即可执行线程方法. 通过继承Th ...
- POJ 2186 Popular Cows 强连通分量模板
题意 强连通分量,找独立的块 强连通分量裸题 #include <cstdio> #include <cstdlib> #include <cstring> #in ...