Jackson 自定义序列化、反序列化方法
🏷️ Jackson
下面的示例代码是序列化日期类型为.net 日期类型默认反序列化支持的格式。
DotNetDateSerializer 反序列化类
自定义一个帮助函数,指定所有日期类型统一使用该序列化方法。
java
package com.octopus.soa.common.helper;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.SerializerProvider;
import java.io.IOException;
import java.util.Date;
/**
* Created by liujiajia on 2017/12/15.
*/
public class DotNetDateSerializer extends JsonSerializer<Date> {
@Override
public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeString("/Date(" + String.valueOf(date.getTime()) + "-0000)/");
}
}
通过继承 JsonDeserializer
类 自定义反序列化类。
自定义序列化类的使用
java
package com.octopus.soa.common.helper;
import org.codehaus.jackson.Version;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.module.SimpleModule;
import java.io.IOException;
import java.util.Date;
/**
* Created by liujiajia on 2017/12/26.
*/
public class JsonHelper {
public static String toJson(Object obj) throws IOException {
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(obj);
}
public static String toDotNetJson(Object obj) throws IOException {
ObjectMapper mapper = new ObjectMapper();
SimpleModule dotNetModule = new SimpleModule("DotNetModule", new Version(1, 0, 0, null));
dotNetModule.addSerializer(Date.class, new DotNetDateSerializer());
mapper.registerModule(dotNetModule);
return mapper.writeValueAsString(obj);
}
}
反序列化可以通过 SimpleModule.addDeserializer
方法指定反序列化类。
也可以对单个字段指定序列化、反序列化方法
java
@JsonSerialize(using = DotNetDateSerializer.class)
private Date flightDate;
反序列化可以使用 @JsonDeserialize
注解实现。