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

问题描述 投票:0回答:1

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

java json jackson
1个回答
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类不包含任何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"));
© www.soinside.com 2019 - 2024. All rights reserved.