【问题标题】:Jackson Adding a Custom Serializer for all fields of Type XJackson 为 Type X 的所有字段添加自定义序列化程序
【发布时间】:2017-12-09 10:07:03
【问题描述】:

我有这样的课:

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;
}

我想以原生方式序列化此类中的所有内容除了,用于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;
}

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

【问题讨论】:

标签: java json serialization jackson


【解决方案1】:

我找不到在课堂上只使用一个注释的解决方案。可能对每个字段进行注释是你能得到的最好的。


另一种方法是以编程方式配置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,那么在每个字段上使用注释似乎是最好的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-01
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 2015-04-15
    相关资源
    最近更新 更多