我有一个自定义序列化程序,扩展了JsonSerializer<T>
并且在ObjectMapper
中包括了setSerializationInclusion(JsonInclude.Include.NON_NULL)
。
我仍然看到null
字段作为响应。
当前,我通过为每个属性检查null
来忽略它们。我几乎有15个对象,很难为每个属性添加null
检查。我正在使用的对象由我的应用程序共享,这就是为什么我使用自定义序列化程序来命名属性的原因
@Override
public void serialize(Person personBean, JsonGenerator jgen, SerializerProvider provider) throws IOException {
if(personBean.getFirstName() != null){
jgen.writeStringField("firstname", personBean.getFirstName() );
}
//etc...
}
如何避免null
检查每个属性并实现一些通用代码来避免我的序列化响应中的null
值。
答案 0 :(得分:0)
不幸的是,当我们编写自定义序列化程序时,我们需要自己注意null
值。为了使它至少好一点,我们可以添加新的writeStringField
方法并使用它。例如:
class PersonJsonSerializer extends JsonSerializer<Person> {
@Override
public void serialize(Person value, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeStartObject();
writeStringField(gen, "firstname", value.getFirstName());
gen.writeEndObject();
}
private void writeStringField(JsonGenerator gen, String fieldName, String value) throws IOException {
if (value != null) {
gen.writeStringField(fieldName, value);
}
}
}
如果仅需要更改属性名称,则可以使用PropertyNamingStrategy
选项。有几种可能性,例如:
示例ObjectMapper
的自定义如下所示:
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CASE);
如果没有预定义的策略可以满足您的需求,则可以使用JsonView
注释。