如何在没有jackson注释的情况下忽略反序列化的某些字段?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在没有jackson注释的情况下忽略反序列化的某些字段?相关的知识,希望对你有一定的参考价值。

我在Spring框架项目中有一个类。该课程不得用杰克逊注释。但是,它使用@Component注释,即org.springframework.stereotype.Component。

@Component
public class SampleClass{
    String prop1;
    String prop2;
    String prop3;
    //Getters & Setters.
}

JSON

"SampleClassJson" : {
    String prop1;
    String prop2;
}

如您所见,SampleClassJson没有prop3。我想通过使用jackson创建一个没有prop3字段的SampleClass对象。我不想为一个缺少的字段创建另一个类。我该如何实现这一目标?我无法使用谷歌或查看对象映射器设置找到任何答案。

答案

你有两个选择。

在getter或field上使用@JsonIgnore

Sample类与@JsonIgnore注释:

class Sample {
    private String prop1;
    private String prop2;
    @JsonIgnore // could be here
    private String prop3;

    @JsonIgnore // could be here
    public String getProp3() {
        return prop3;
    }
}

ObjectMapper使用来自Sample类的注释:

new ObjectMapper().writeValueAsString(new Sample("one", "two", "three"))

第二个变种,是使用自定义序列化器:

自定义序列化器:

class SampleSerializer extends JsonSerializer<Sample> {

    @Override
    public void serialize(Sample sample, JsonGenerator jgen, SerializerProvider provider) throws IOException {
        jgen.writeStartObject();
        jgen.writeStringField("prop1", sample.getProp1());
        jgen.writeStringField("prop2", sample.getProp2());
        jgen.writeEndObject();
    }
}

添加注释以使用自定义序列化程序:

@JsonSerialize(using = SampleSerializer.class)
class Sample {

    private String prop1;
    private String prop2;
    private String prop3;
}

ObjectMapper使用来自Sample类的注释:

new ObjectMapper().writeValueAsString(new Sample("one", "two", "three"))

如果您根本不使用Jackson注释,可以将自定义序列化程序添加到ObjectMapper

Sample类不包含任何Jackson注释:

class Sample {

    private String prop1;
    private String prop2;
    private String prop3;
}

ObjectMapper应该知道如何序列化Sample类:

ObjectMapper mapper = new ObjectMapper();

SimpleModule module = new SimpleModule();
module.addSerializer(Sample.class, new SampleSerializer());
mapper.registerModule(module);

mapper.writeValueAsString(new Sample("one", "two", "three"));

以上是关于如何在没有jackson注释的情况下忽略反序列化的某些字段?的主要内容,如果未能解决你的问题,请参考以下文章

Jackson 将 YAML 文件反序列化为 Map(没有自定义反序列化器)

杰克逊:忽略空@XmlWrapperElement 集合中的空格

如何忽略像“car”这样的空 json 对象:,这会在使用 jackson 反序列化后导致空 pojos

如何使用 Jackson json 注释枚举字段以进行反序列化

jackson 常用注解,比如忽略某些属性,驼峰和下划线互转

在使用 Jackson 反序列化期间选择性地忽略 JSON 属性