加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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,那么在每个字段上使用注释似乎是最佳解决方案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读