杰克逊根据价值忽略序列化字段

时间:2015-03-05 13:22:12

标签: java json jackson

我知道如果字段为null或者它们是空的,可以忽略字段,但是是否可以忽略字段,例如,如果它是字符串,并且包含某个子字符串?

1 个答案:

答案 0 :(得分:4)

如果你这样做,这是可能的。使用@JsonIgnoreConverter的组合。

如果您假设以下Person POJO:

@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Person {
    private final String email;
    private final String name;

    public Person(final String name, final String email) {
        this.name = name;
        this.email = email;
    }

    // Will use special conversion before serializing
    @JsonSerialize(converter = EmailConverter.class)
    public String getEmail() {
        return email;
    }

    // Will simply use default serialization
    public String getName() {
        return name;
    }
}

在POJO中,您定义只应包含非空值。此外,声明特定转换器将用于email属性。转换器可以这样定义:

public class EmailConverter extends StdConverter<String, String> {
    @Override
    public String convert(final String value) {
        return Optional.ofNullable(value)
                .filter(email -> email.length() > 0)
                .filter(email -> email.contains("@"))
                .orElse(null);
    }
}

请注意,转换器使用的Optional功能,但任何验证代码都可以。当返回null时,它被简单地跳过,因为它是在Person类中声明的那样。

有关详细信息,请查看Converter@JsonSerialize的JavaDoc。