gpt4 book ai didi

jackson - 有没有办法使用 Java 8 lambda 样式来添加自定义 Jackson 序列化程序?

转载 作者:行者123 更新时间:2023-12-02 10:13:20 26 4
gpt4 key购买 nike

现在通过 Jackson 模块添加 Jackson 自定义序列化器非常冗长,并且不适合新的 Java 8 lambda 模式。

有没有办法使用 Java 8 lambda 样式来添加自定义 Jackson 序列化程序?

最佳答案

您可以制作一个简单的 Jackson8Module,它允许您执行以下操作:

ObjectMapper jacksonMapper = new ObjectMapper();
Jackson8Module module = new Jackson8Module();
module.addStringSerializer(LocalDate.class, (val) -> val.toString());
module.addStringSerializer(LocalDateTime.class, (val) -> val.toString());
jacksonMapper.registerModule(module);

Jackson8Module 代码只是扩展了 Jackson SimpleModule 以提供 Java 8 友好的方法(它可以扩展以支持其他 Jackson Module 方法):

public class Jackson8Module extends SimpleModule {

public <T> void addCustomSerializer(Class<T> cls, SerializeFunction<T> serializeFunction){
JsonSerializer<T> jsonSerializer = new JsonSerializer<T>() {
@Override
public void serialize(T t, JsonGenerator jgen, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
serializeFunction.serialize(t, jgen);
}
};
addSerializer(cls,jsonSerializer);
}

public <T> void addStringSerializer(Class<T> cls, Function<T,String> serializeFunction) {
JsonSerializer<T> jsonSerializer = new JsonSerializer<T>() {
@Override
public void serialize(T t, JsonGenerator jgen, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
String val = serializeFunction.apply(t);
jgen.writeString(val);
}
};
addSerializer(cls,jsonSerializer);
}

public static interface SerializeFunction<T> {
public void serialize(T t, JsonGenerator jgen) throws IOException, JsonProcessingException;
}
}

以下是 Jackson8Module 的要点:https://gist.github.com/jeremychone/a7e06b8baffef88a8816

关于jackson - 有没有办法使用 Java 8 lambda 样式来添加自定义 Jackson 序列化程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28156789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com