我有一个这样的课程:
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;
}
我的问题是,我可以将其合并到单个级别的注释中吗?
答案 0 :(得分:0)
我找不到在类中只使用一个注释的解决方案。可能会给每个领域注释是最好的。
另一种方法是以编程方式配置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
,那么在每个字段上使用注释似乎是最佳解决方案。