java – Jackson为Type X的所有字段添加自定义序列化程序
发布时间:2020-12-15 02:19:44 所属栏目:Java 来源:网络整理
导读:我有一个这样的课: 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;} 我
我有一个这样的课:
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; } 我的问题是,我可以将其合并到单个类级注释中吗? 解决方法
我找不到在类中只使用一个注释的解决方案.可能会给每个字段添加注释是最好的.
另一种方法是以编程方式配置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,那么在每个字段上使用注释似乎是最佳解决方案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |