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

时间:2018-03-06 06:41:02

标签: java json 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对象。我不想为一个缺少的字段创建另一个类。我该如何实现这一目标?我无法使用谷歌或查看对象映射器设置找到任何答案。

1 个答案:

答案 0 :(得分:1)

您有两种选择。

在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类不包含任何杰克逊注释:

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"));