现在首先,我已经阅读了本网站上的其他一些答案以及其他关于杰克逊序列化的答案,但它们都提供了忽略null
字段的方法。但是,在Java中,int
不能是null
。
我正在尝试将ObjectMap
一个java对象转换为Json
,但忽略任何null
字段。这适用于字符串,但如果未初始化,则int
最终会获得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
类作为数据类型,但导致转换为Json
字符串以抛出JsonProcessingException。
答案 0 :(得分:8)
使用Jackson JsonInclude注释:
@JsonInclude(Include.NON_DEFAULT)
解决了未分配的基元类型总是采用默认值的问题;在这种情况下,未分配的int
变为0
,随后会被忽略。
答案 1 :(得分:4)
使用int wrapper Integer
。这样您就可以使用null
值。
或者,您可以在序列化时使用Jackson's JsonInclude annotation来忽略空值。
@JsonInclude(Include.NON_NULL)
public class MyClass{
...
}
答案 2 :(得分:2)
将int
更改为Integer
。
否则不行,不可能以任何方式使用null变量。