java - jackson 根据值(value)忽略序列化字段

标签 java json jackson

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

最佳答案

这是可能的,例如使用 @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 的 JavaDocs和 @JsonSerialize .

关于java - jackson 根据值(value)忽略序列化字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28878847/

相关文章:

java - 微服务 - 多个服务副本之间的竞争条件

java - 如何在 Java 中从 JSON 中提取 JSONArray 和 JSONObject

java - 在 Jackson ObjectMapper 上序列化时禁用 Base64 编码

java - 使用 Jackson 库反序列化非指定对象

Java 日历 : Why are UTC offsets being reversed?

java - 启动 Activity 不起作用

java - 在 Linux Fedora Hyper-V 虚拟机上独立启动 HBase 时出错

python - 使用 Python/Pandas 处理嵌套在 JSON 中的 JSON

php - jQuery AJAX POST 到 PHP 问题

java - 如何否定@JsonView?