杰克逊根据价值忽略序列化字段
Jackson ignore serializing field depending on value
我知道可以忽略为 null 或空的字段,但是是否可以忽略一个字段,例如,如果它是一个字符串,并且包含某个子字符串?
这是可能的,如果你使用 @JsonIgnore
和 Converter
.
的组合
如果假设以下 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
,这是一个 java-8 功能,但任何验证代码都可以。当返回 null 时,它会被简单地跳过,因为它是在 Person
class.
中以这种方式声明的
有关详细信息,请查看 Converter and @JsonSerialize 的 JavaDocs。
我知道可以忽略为 null 或空的字段,但是是否可以忽略一个字段,例如,如果它是一个字符串,并且包含某个子字符串?
这是可能的,如果你使用 @JsonIgnore
和 Converter
.
如果假设以下 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
,这是一个 java-8 功能,但任何验证代码都可以。当返回 null 时,它会被简单地跳过,因为它是在 Person
class.
有关详细信息,请查看 Converter and @JsonSerialize 的 JavaDocs。