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>>() {});

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM