java - 如何告诉 Jackson 在序列化期间忽略具有 EMPTY 或 NULL 字段的对象?

标签 java jackson

我知道这些注释 @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/

相关文章:

java - bukkit 插件内的套接字在使用后关闭

java - 我应该如何在java中提取压缩文件夹?

json - 如何让 Spring RestTemplate、scala 和 Jackson 和谐相处

java - 如何在后台运行进程并重定向jsp页面

java - 如何使用Java实现类似数组的数据结构?

java - 如何使用 Jackson 迭代 JSON 对象?

java - Jackson typeId 不包含在生成的 json 中

Java - 如何在 Map 数据结构中加载 CSV,键和值作为 POJO - Map<ClassA, ClassB>

java - 执行我的 drools 规则后如何返回多个 Assets ?

java - 泛型的不兼容类型