9

我正在使用Jackson ObjectMapper从 Java 对象树构建 JSON 。我的一些 Java 对象是集合,有时它们可​​能是空的。因此,如果它们是空的,ObjectMapper 会生成我:"attributes": [],并且我想从我的结果中排除那些空的 JSON 数组。我当前的 ObjectMapper 配置:

SerializationConfig config = objectMapper.getSerializationConfig();
config.setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
config.set(SerializationConfig.Feature.WRAP_ROOT_VALUE, true);

这篇文章我读到我可以使用:

config.setSerializationInclusion(JsonSerialize.Inclusion.NON_DEFAULT);

但这给我带来了一个错误:

Caused by: java.lang.IllegalArgumentException: Class com.mycomp.assessments.evaluation.EvaluationImpl$1 has no default constructor; can not instantiate default bean value to support 'properties=JsonSerialize.Inclusion.NON_DEFAULT' annotation.

那么我应该如何防止那些空数组出现在我的结果中呢?

4

2 回答 2

16

你应该使用:

config.setSerializationInclusion(JsonSerialize.Inclusion.NON_EMPTY);

对于杰克逊 1 或

config.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);

杰克逊 2

于 2013-02-06T10:15:59.103 回答
0

如果可以修改要序列化的对象,也可以直接在字段上打上注解,例如(Jackson 2.11.2):

@JsonProperty
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private Set<String> mySet = new HashSet<>();

通过这种方式,不需要进一步的配置ObjectMapper

于 2020-09-08T09:06:38.633 回答