首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jackson自定义序列化程序,带有自定义注释的模型对象

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

Stack Overflow用户
提问于 2015-07-24 16:28:48
回答 1查看 943关注 0票数 1

我想在Jackson Serializer中处理自定义注释。用例是在来自两个不同数据源的数据之间进行一致性检查,并有可能忽略某些字段。我可以使用@JsonIgnore,但在进行标准bean序列化时需要这些字段。我的想法是实现一个自定义的序列化程序,当我想要进行一致性检查时,我将使用它。换句话说,定制序列化程序对@IgnoreConsistencyCheck的作用与对@JsonIgnore的作用相同。

下面是一个示例对象:

代码语言:javascript
复制
public class Model implements Serializable {
    @JsonIgnore
    private int id;
    private String name;
    private String description

    @IgnoreConsistencyCheck
    private Date creationDate;
}

是否有可能通过扩展Jackson代码来实现它?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-07-24 23:14:14

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

过滤器代码(CC代表‘一致性检查’):

代码语言:javascript
复制
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;
    }
}

型号:

代码语言:javascript
复制
@JsonFilter("ignoreCCFields")
public class Model implements Serializable {
    @IgnoreConsistencyCheck
    private int id;
    private String name;
    private String description

    @IgnoreConsistencyCheck
    private Date creationDate;
}

ObjectMapper配置:

代码语言:javascript
复制
ObjectMapper objectMapper = new ObjectMapper();
PropertyFilter propertyFilter = new IgnoreCCFilter();
objectMapper.setFilters(new SimpleFilterProvider(
            Collections.singletonMap("ignoreCCFields", propertyFilter))
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31605689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档