带有自定义注释模型对象的jackson自定义序列化程序

时间:2015-07-24 08:28:48

标签: java jackson

我想在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;
}

是否可以通过扩展杰克逊代码来实现它?

由于

1 个答案:

答案 0 :(得分:0)

您可以编写自定义过滤器,然后使用@JsonFilterObjectMapper配置进行连接。

过滤代码(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))
);