如果Optional字段的值为空,则在序列化期间忽略该字段的值。
Employee.java
class Employee {
private String firstName;
private String secondName;
public Optional<String> getFirstName() {
return Optional.ofNullable(firstName);
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public Optional<String> getSecondName() {
return Optional.ofNullable(secondName);
}
public void setSecondName(String secondName) {
this.secondName = secondName;
}
}
已将Jackson配置如下:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new Jdk8Module());
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
System.out.println(objectMapper.writeValueAsString(employee));
序列化方法给出以下输出:
{"firstName":"foo", "secondName":null}
但我们想要的结果如下:
{"firstName":"foo"}
3条答案
按热度按时间w41d8nur1#
Optional
的javadoc声明:Optional主要用于在明确需要表示“无结果”以及使用null可能导致错误的情况下用作方法返回类型。
换句话说,您首先不应该在这里使用
Optional
。但是,如果您仍然想这样做,
@JsonInclude(NON_ABSENT)
(doc)应该可以正常工作。ax6ht2ek2#
您可以创建自定义序列化程序:
然后将此注解添加到
Employee
类中:您可以在这里阅读更多内容:https://www.baeldung.com/jackson-custom-serialization
希望能帮上忙!
yvgpqqbh3#
重写消息转换器以配置全局序列化设置