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