Java 如何告诉Jackson在序列化期间忽略具有空字段或空字段的对象?
我知道关于@JsonInclude(JsonInclude.Include.NON_NULL)和@JsonInclude(JsonInclude.Include.EMPTY)的注释,但在我的例子中它不起作用 我的情况是: 我有一些类(实体(SomeClass)),其中有一些其他实体(SomeObject) 实体-对象Java 如何告诉Jackson在序列化期间忽略具有空字段或空字段的对象?,java,jackson,Java,Jackson,我知道关于@JsonInclude(JsonInclude.Include.NON_NULL)和@JsonInclude(JsonInclude.Include.EMPTY)的注释,但在我的例子中它不起作用 我的情况是: 我有一些类(实体(SomeClass)),其中有一些其他实体(SomeObject) 实体-对象 @Data public class SomeClass { private String fieldOne; @JsonInclu
@Data
public class SomeClass {
private String fieldOne;
@JsonInclude(JsonInclude.Include.NON_NULL)
private String fieldTwo;
@JsonInclude(JsonInclude.Include.NON_NULL)
private 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":{}}
最终输出应该是,没有对象(SomeObject)和空字段:
{"fieldOne":"some data"}
我认为这里只能应用自定义逻辑。您需要使用
@JsonInclude(value=JsonInclude.Include.CUSTOM,valueFilter=YourFilter.class)
并创建自定义YourFilter
类。您可以使用boolean方法创建基接口,并在需要根据类中所有/所需字段的可空性筛选出的所有类中重写它。
或者您可以在此方法中解析@JsonInclude(JsonInclude.Include.NON_NULL)
注释,以获取所有字段,您需要检查这些字段的可空性
这是否回答了您的问题?)不,我的情况不同,我看到了这个主题。我运行了你的代码。它给出了有效的输出
{“fieldOne”:“somedata”,“someObject”:{}
我希望看到没有“someObject”:{}的{“fieldOne”:“somedata”}!看一看,很有趣,我会试试的