import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.module.SimpleModule;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CustomDateSerializationExample {
public static class DateSerializer extends JsonSerializer<Date> {
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
@Override
public void serialize(Date value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
String formattedDate = DATE_FORMAT.format(value);
gen.writeString(formattedDate);
}
}
public static class DateDeserializer extends JsonDeserializer<Date> {
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
@Override
public Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
String dateString = p.getText();
try {
return DATE_FORMAT.parse(dateString);
} catch (Exception e) {
throw new IOException("Failed to parse date: " + dateString, e);
}
}
}
public static class Person {
private String name;
private Date birthDate;
// 省略构造函数和getter/setter方法
}
public static void main(String[] args) throws Exception {
SimpleModule module = new SimpleModule();
module.addSerializer(Date.class, new DateSerializer());
module.addDeserializer(Date.class, new DateDeserializer());
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(module);
// 序列化示例
Person person = new Person("John Doe", new SimpleDateFormat("yyyy-MM-dd").parse("2000-01-01"));
String json = objectMapper.writeValueAsString(person);
System.out.println(json); // 输出结果:{"name":"John Doe","birthDate":"2000-01-01"}
// 反序列化示例
String jsonInput = "{\"name\":\"Jane Smith\",\"birthDate\":\"1990-12-31\"}";
Person deserializedPerson = objectMapper.readValue(jsonInput, Person.class);
System.out.println(deserializedPerson.getBirthDate()); // 输出结果:Sat Dec 31 00:00:00 GMT 1990
}
}
实现自定义序列化和反序列化控制的5种方式
原创
©著作权归作者所有:来自51CTO博客作者mb650bf5d8d0151的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:idea查看pom依赖关系
下一篇:springsecurity详解
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Java反序列化-反射
java反序列化之-反射
java 反序列化 web安全 -
jackson中自定义处理序列化和反序列化
对于一直用gson的人来说,如果单独用jackson,真是麻烦了,但还是得小结下
json java代码 反序列化 -
【网络】自定义协议 | 序列化和反序列化 | Jsoncpp
json是一个kv键值对的序列化方式,每一个key都对应了一个value这就有点类似c++中的map,不过json能做的更多jso
linux tcp json 序列化 Server