【发布时间】:2015-10-15 19:27:20
【问题描述】:
假设我有一个对象:
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Foods {
public Foods() {}
@Id
@JsonProperty
private String id;
@JsonProperty
private String name;
@JsonProperty
private Double calories;
@JsonProperty
private boolean sweet;
}
现在,在我的 Spring REST API 调用中,我只填充食物的“名称”字段并将其返回。
我得到这个作为返回 JSON:
{
"name": "Strawberry Pies",
"sweet": false
}
您可以看到,由于未填充卡路里,因此 JSON 不会返回它。我猜“甜蜜”字段会被填充,因为布尔值的默认值为 false。
但是,如果 JSON 字符串一开始没有填充,我不希望 JSON 字符串返回 false 的“甜蜜”布尔值。有没有办法做到这一点?
【问题讨论】:
-
简单的答案是
NON_NULL的意思是,“不要包含null值”。如果String-valued 字段未初始化,它们将是nulls。但是boolean是原始类型,从不使用空值:false不是null。如果您确实希望将其排除在外,您可以将“sweet”设为Boolean(即java.lang.Boolean)类型,该包装器也允许nulls。或者,就像建议的另一个答案一样,只需使用NON_DEFAULT。 -
@StaxMan Jackson 是否将类实例化一次(使用无参数构造函数)以检查 DEFAULT 值并与您传递的用于序列化的实例进行比较?这样做的动机是什么? (而不仅仅是默认的初始化值。)
-
@SotiriosDelimanolis 这并不意味着“任何默认值都适用于原语”。它的字面意思是“实例化时该类的默认值(使用无参数 ctor)”——要知道那将是什么,需要一个实例来检查这些默认值是什么。
-
@StaxMan Nono,你说的是我的意思。我很好奇为什么会这样。这是一个常见的场景(相对于不序列化默认初始化值,0、false、null)?
-
@StaxMan 我担心意外的实例创建。
标签: java json spring-mvc jackson