Java Jackson为X类型的所有字段添加自定义序列化程序
我有一门课是这样的:Java Jackson为X类型的所有字段添加自定义序列化程序,java,json,serialization,jackson,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 Loc
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
}
}
我的问题是,我能把它合并成一个类级别的注释吗?我找不到一个在类中只使用一个注释的解决方案。可能注释每个字段是您能得到的最好结果
另一种方法是以编程方式配置
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
,那么在每个字段上使用注释似乎是最好的解决方案。添加自定义模块似乎是一种方法@MaxPower这不是我要问的问题。我已经编写了一个自定义序列化程序。我在问有关注释的问题
ObjectMapper om = new ObjectMapper();
JavaTimeModule module = new JavaTimeModule();
module.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("dd/MM/yyyy")));
om.registerModule(module);