我知道这些注释 @JsonInclude(JsonInclude.Include.NON_NULL) 和 @JsonInclude(JsonInclude.Include.EMPTY) 但在我的情况下它不起作用。
我的情况是:
我有一些类(实体(SomeClass)),其中有一些其他实体(SomeObject)
@Data
public class SomeClass {
private String fieldOne;
@JsonInclude(JsonInclude.Include.NON_NULL)
private String fieldTwo;
@JsonInclude(JsonInclude.Include.NON_NULL)
private SomeObject someObject;
}
实体 - SomeObject
@Data
public class SomeObject {
@JsonInclude(JsonInclude.Include.NON_NULL)
private String name;
}
主类
public class Main {
public static void main(String[] args) throws JsonProcessingException {
SomeClass someClass = new SomeClass();
someClass.setFieldOne("some data");
SomeObject someObject = new SomeObject();
someObject.setName(null);
someClass.setSomeObject(someObject);
ObjectMapper objectMapper = new ObjectMapper();
String someClassDeserialized = objectMapper.writeValueAsString(someClass);
System.out.println(someClassDeserialized);
}
}
输出
{"fieldOne":"some data","someObject":{}}
最终输出应该是,没有带有 null 或空字段的对象(SomeObject):
{"fieldOne":"some data"}
最佳答案
我认为这里只能应用自定义逻辑。您需要使用 @JsonInclude(value = JsonInclude.Include.CUSTOM, valueFilter = YourFilter.class)
并创建自定义 YourFilter
类。您可以使用 boolean 方法创建基接口(interface),并在需要根据类中所有/所需字段的可空性过滤掉的所有类中重写它。
或者您可以在此方法中解析 @JsonInclude(JsonInclude.Include.NON_NULL)
注解,以获取所有字段,您需要检查哪些字段为空。
https://www.logicbig.com/tutorials/misc/jackson/json-include-customized.html
关于java - 如何告诉 Jackson 在序列化期间忽略具有 EMPTY 或 NULL 字段的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61453850/