杰克逊序列化:忽略未初始化的 int

Jackson serialization: Ignore uninitialised int

现在首先,我已经阅读了本网站上的一些其他答案以及其他关于 jackson 序列化的答案,但它们都提供了忽略 null 字段的方法。然而,在 Java 中,int 不能是 null.

我正在尝试 ObjectMap 一个 java 对象转换为 Json 但忽略任何 null 字段。这适用于字符串,但如果未初始化,ints 最终会采用 0 的值,并且由于 0 不是 null,因此不会忽略该字段。

    private ObjectWriter mapper = new ObjectMapper().writer();
    private myClass data = new myClass(); //class contains a string and int variable
    data.setNumber(someInt); //set values
    data.setString(someString);

    String Json = mapper.writeValueAsString(data);

任何人都可以解释一下吗?

编辑:为了澄清,我尝试使用 Integer class 作为数据类型,但导致转换为 Json 字符串以抛出 JsonProcessingException。

使用 int 包装器 Integer。这样您就可以使用 null 值。

或者您可以使用 Jackson's JsonInclude annotation 在序列化时忽略空值。

@JsonInclude(Include.NON_NULL)  
public class MyClass{
    ...
}

int 更改为 Integer

否则不,不可能以任何方式将 int 变量设置为 null。

使用 Jackson JsonInclude 注释:

@JsonInclude(Include.NON_DEFAULT)

解决了未分配的原始类型总是采用默认值的问题;在这种情况下,未分配的 int 变为 0 并随后被忽略。