我想在Jackson Serializer中处理自定义注释。用例是对来自两个不同数据源的数据进行一致性检查,并且还可以忽略某些字段。我可以使用@JsonIgnore
,但在进行标准bean序列化时我需要这些字段。我的想法是实现一个自定义序列化程序,我想在进行一致性检查时使用它。换句话说,自定义序列化程序对@IgnoreConsistencyCheck
执行与@JsonIgnore
相同的操作。
以下是一个示例对象:
public class Model implements Serializable {
@JsonIgnore
private int id;
private String name;
private String description
@IgnoreConsistencyCheck
private Date creationDate;
}
是否可以通过扩展杰克逊代码来实现它?
由于
答案 0 :(得分:0)
您可以编写自定义过滤器,然后使用@JsonFilter
和ObjectMapper
配置进行连接。
过滤代码(CC
代表'cosistency check'):
class IgnoreCCFilter extends SimpleBeanPropertyFilter {
@Override
public void serializeAsField(Object pojo, JsonGenerator jgen,
SerializerProvider prov,
PropertyWriter writer) throws Exception {
if (includeField(writer)) {
writer.serializeAsField(pojo, jgen, prov);
}
}
private boolean includeField(PropertyWriter writer) {
return writer.getAnnotation(IgnoreConsistencyCheck.class) == null;
}
}
型号:
@JsonFilter("ignoreCCFields")
public class Model implements Serializable {
@IgnoreConsistencyCheck
private int id;
private String name;
private String description
@IgnoreConsistencyCheck
private Date creationDate;
}
ObjectMapper config:
ObjectMapper objectMapper = new ObjectMapper();
PropertyFilter propertyFilter = new IgnoreCCFilter();
objectMapper.setFilters(new SimpleFilterProvider(
Collections.singletonMap("ignoreCCFields", propertyFilter))
);