Inclusion/exclusion of the field during serialization.

huangapple go评论65阅读模式
英文:

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 &quot;emptiness&quot; just for standard data types (a collection, a string...) but not for a custom data type like `Mgmt`.

Since that&#39;s your class, it&#39;s only you knowing what &quot;empty&quot; (or not) means and in your specific case, emptiness is given by the fact that one of its properties (`List&lt;String&gt; values`) is itself empty. 

To achieve that, you can define a custom filter for `Mgmt` emptiness (it&#39;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; //&lt;-- not an instance of Mgmt so we filter it out
            }
            return ((Mgmt) obj).values.isEmpty(); //&lt;-- 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>



huangapple
  • 本文由 发表于 2023年2月23日 23:28:51
  • 转载请务必保留本文链接:https://go.coder-hub.com/75546913.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定