zoukankan      html  css  js  c++  java
  • 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>>() {});
  • 相关阅读:
    用户IP地址的三个属性的区别(HTTP_X_FORWARDED_FOR,HTTP_VIA,REM_addr
    Backbone源码分析-Backbone架构+流程图
    为什么我的SQL server 在附加数据库后,数据库总是变成了只读?
    js window.open()实现打印,如何在关闭打印窗口时刷新父窗口
    .NET获取不到js写的cookie解决方法
    网站安全狗”响应内容保护“网页错误返回页面优化功能介绍
    快钱支付与Sql Server的乐观锁和悲观锁
    RequiredFieldValidator 根据group组来触发验证
    DropDownList中显示无限级树形结构
    大量多风格多功能后台管理模板
  • 原文地址:https://www.cnblogs.com/wuyifu/p/3653618.html
Copyright © 2011-2022 走看看