英文:
Inclusion/exclusion of the field during serialization
问题
在序列化Test类时,尽管使用了'NON_EMPTY'的包含标准,'Mgmt'字段仍然以mgmt : {}的形式写出。如果Mgmt类的values为空列表,我想避免字段mgmt : {}的出现。
英文:
I am having a POJO class with ,
class Test {
@JsonInclude(JsonInclude.Include.NON_EMPTY)
Mgmt mgmt;
}
class Mgmt {
@JsonInclude(JsonInclude.Include.NON_EMPTY)
List<String> values;
}
During serialization of Test , 'Mgmt' field is coming as mgmt : {} still written out despite ‘NON_EMPTY’ inclusion criteria used. I would like to avoid the field mgmt : {}, if Mgmt class -> values has empty list.
答案1
得分: 0
这是翻译后的代码部分:
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
这是翻译后的代码部分:
```java
<details>
<summary>英文:</summary>
It happens because the default implementation of `JsonInclude.Include.NON_EMPTY` understands "emptiness" just for standard data types (a collection, a string...) but not for a custom data type like `Mgmt`.
Since that's your class, it's only you knowing what "empty" (or not) means and in your specific case, emptiness is given by the fact that one of its properties (`List<String> values`) is itself empty.
To achieve that, you can define a custom filter for `Mgmt` emptiness (it's a simple class where you override the `equals` method to make it return `true` everytime you want to filter that instance out of the serialized Json:
class MgmtFilter {
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Mgmt)) {
return true; //<-- not an instance of Mgmt so we filter it out
}
return ((Mgmt) obj).values.isEmpty(); //<-- if the list is empty, we return true (meaning we filter it out)
}
}
... and then you use this class with a custom include:
class Test {
@JsonInclude(value = JsonInclude.Include.CUSTOM, valueFilter = MgmtFilter.class)
Mgmt mgmt;
}
</details>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论