java - Jackson 为 Type X 的所有字段添加自定义序列化程序

标签 java json serialization jackson

我有这样一个类:

public class Foo {
    private Integer id;
    private FooB fooA;
    private boolean isB;
    private boolean isC;
    private int age;
    private LocalDate date1;
    private LocalDate date2;
    private LocalDate date3;
    private LocalDate date4;
}

我想 native 序列化此类中的所有内容, LocalDate 字段除外。我有一个像这样的自定义序列化程序:

public class LocalDateSerializer extends JsonSerializer<LocalDate> {
    @Override
    public void serialize(LocalDate localDate, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
        //serialize
    }
}

有没有办法注释类 Foo 说只对 LocalDate 类型的对象使用序列化器 或者 我必须去吗像这样注释每个单独的字段:

public class Foo {
    private Integer id;
    private FooB fooA;
    private boolean isB;
    private boolean isC;
    private int age;
    @JsonSerialize(using = LocalDateSerializer.class)
    private LocalDate date1;
    @JsonSerialize(using = LocalDateSerializer.class)
    private LocalDate date2;
    @JsonSerialize(using = LocalDateSerializer.class)
    private LocalDate date3;
    @JsonSerialize(using = LocalDateSerializer.class)
    private LocalDate date4;
}

我的问题是,我可以将其合并为一个类级别的注释吗?

最佳答案

我找不到在类中只使用一个注释的解决方案。可能对每个字段进行注释是您可以获得的最好结果。


另一种方法是以编程方式配置ObjectMapper:

ObjectMapper om = new ObjectMapper();
JavaTimeModule module = new JavaTimeModule();
module.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("dd/MM/yyyy")));
om.registerModule(module);

addSerializer 方法映射所有 LocalDate 字段以使用指定的序列化器。在上面的示例中,我将内置的 com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializerDateTimeFormatter 一起使用,当然您可以将其替换为您想要的任何序列化程序(包括您自定义的序列化程序)。

如果您不想(或不能)配置 ObjectMapper,那么在每个字段上使用注释似乎是最好的解决方案。

关于java - Jackson 为 Type X 的所有字段添加自定义序列化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44931297/

相关文章:

java - Selenium Webdriver 中的 Junit 标记不起作用

java - Java 中用于字符串相等的 println() 方法......以及它是如何工作的?

javascript - 不显示来自 JSON 数据的图表

json - JacksonPolymorphicDeserialization : JsonMappingException

c# - JSON 反序列化异常 ('' S' 是值的无效开始)

java - 使用私有(private)字段和私有(private)构造函数将对象写入文件

java - MappedSuperclass 和 Embeddable 之间有什么区别,我们应该如何使用

java - 如何按 "/"拆分并在 java 中像树一样分层存储?

ios - SwiftUI : API URL fetch failed

json - 使用groovy解析响应Json字符串