我有这样一个类:
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.LocalDateSerializer
与 DateTimeFormatter
一起使用,当然您可以将其替换为您想要的任何序列化程序(包括您自定义的序列化程序)。
如果您不想(或不能)配置 ObjectMapper
,那么在每个字段上使用注释似乎是最好的解决方案。
关于java - Jackson 为 Type X 的所有字段添加自定义序列化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44931297/