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

Shi*_*iri 2 java int null serialization json

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

我正在尝试将ObjectMapjava对象转换为Json但忽略任何null字段.这适用于字符串,但int最终会取得0if未初始化的值,因为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);
Run Code Online (Sandbox Code Playgroud)

有人可以对此有所了解吗?

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

Shi*_*iri 10

使用Jackson JsonInclude注释:

@JsonInclude(Include.NON_DEFAULT)
Run Code Online (Sandbox Code Playgroud)

解决了未分配的基元类型总是采用默认值的问题; 在这种情况下,未分配的ints将成为0并随后被忽略.


dgu*_*uay 6

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

或者,您可以使用Jackson 的 JsonInclude 注释在序列化时忽略空值。

@JsonInclude(Include.NON_NULL)  
public class MyClass{
    ...
}
Run Code Online (Sandbox Code Playgroud)


lib*_*bik 5

改成。intInteger

否则不行,无论如何都不可能有带有 null 的 int 变量。

  • @Shiri 访问器方法也应该更新以返回/设置“Integer”类。 (2认同)