Java 如何告诉Jackson在序列化期间忽略具有空字段或空字段的对象?

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

我知道关于@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;
    }
@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”}!看一看,很有趣,我会试试的