Ric*_*ard 6 java serialization json 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;
}
Run Code Online (Sandbox Code Playgroud)
我想本地序列化此类中除字段之外的所有内容LocalDate。我有一个自定义序列化器,如下所示:
public class LocalDateSerializer extends JsonSerializer<LocalDate> {
@Override
public void serialize(LocalDate localDate, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
//serialize
}
}
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以对类进行注释,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;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,我可以将其合并到单个类级别注释中吗?
小智 0
我找不到一种在类中仅使用一个注释的解决方案。也许对每个字段进行注释是你能得到的最好的结果。
另一种方法是以ObjectMapper编程方式配置:
ObjectMapper om = new ObjectMapper();
JavaTimeModule module = new JavaTimeModule();
module.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("dd/MM/yyyy")));
om.registerModule(module);
Run Code Online (Sandbox Code Playgroud)
该addSerializer方法映射所有LocalDate字段以使用指定的序列化器。在上面的示例中,我使用了内置的com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializera DateTimeFormatter,但当然您可以将其替换为您想要的任何序列化器(包括您的自定义序列化器)。
如果您不想(或不能)配置ObjectMapper,那么在每个字段上使用注释似乎是最好的解决方案。