@JsonInclude.Include.CUSTOM 自定义属性值过滤规则

本文介绍了如何使用Jackson库通过@JsonInclude.CUSTOM和自定义过滤器,如DateOfBirthFilter和PhoneFilter,来控制在序列化JSON时哪些属性值会被包含。日期需为过去,电话号码需符合特定格式。示例展示了如何在Employee对象中应用这些过滤器并展示不同配置下序列化结果的变化。
摘要由CSDN通过智能技术生成

使用 @JsonInclude#value = JsonInclude.Include.CUSTOM 并通过 @ JsonInclude#valueFilter 指定一个过滤器类,则该属性值只有在没有被过滤器类过滤的情况下才会被序列化。过滤器类的 equals() 方法用于过滤值;如果返回true,则值不会序列化

同样,使用 @JsonInclude#value = JsonInclude.Include.CUSTOM 并通过 @JsonInclude#contentFilter 指定过滤器类,则如果过滤器类的 equals()方法返回true,则不会序列化目标属性的内容值。

Example

public class Employee {
    private String name;

    @JsonInclude(value = JsonInclude.Include.CUSTOM, valueFilter = DateOfBirthFilter.class)
    private Date dateOfBirth;

    @JsonInclude(content = JsonInclude.Include.CUSTOM, contentFilter = PhoneFilter.class)
    private Map<String, String> phones;
    ...
}    

Filter Classes

日期必须是过去的日期

public class DateOfBirthFilter {

    @Override
    public boolean equals(Object obj) {
        if (obj == null || !(obj instanceof Date)) {
            return false;
        }

        Date date = (Date) obj;
        return !date.before(new Date());
    }
}

手机号码必须与正则表达式匹配

public class PhoneFilter {

    private static Pattern phonePattern = Pattern.compile("\\d{3}-\\d{3}-\\d{4}");

    @Override
    public boolean equals(Object obj) {
        if (obj == null || !(obj instanceof String)) {
            return false;
        }
        return phonePattern.matcher(obj.toString()).matches();
    }
}

Main class

public class ExampleMain {
    public static void main(String[] args) throws IOException {
        Employee employee = new Employee();
        employee.setName("Trish");
        employee.setDateOfBirth(Date.from(ZonedDateTime.now().plusDays(1).toInstant()));
        employee.setPhones(Map.of("Cell","111-111-1111", "Work", "(222) 222 2222"));

        ObjectMapper om = new ObjectMapper();
        String jsonString = om.writeValueAsString(employee);
        System.out.println(jsonString);
    }
}
{"name":"Trish","phones":{"Work":"(222) 222 2222"}}

不使用自定义过滤器

{"name":"Trish","dateOfBirth":1619091861386,"phones":{"Work":"(222) 222 2222","Cell":"111-111-1111"}}

原文链接

Jackson JSON - Applying Custom property inclusion rules using @JsonInclude.Include.CUSTOM

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值