@JsonInclude(JsonInclude.Include.NON_EMPTY) 当我使用包装类并返回结果时不起作用

Posted

技术标签:

【中文标题】@JsonInclude(JsonInclude.Include.NON_EMPTY) 当我使用包装类并返回结果时不起作用【英文标题】:@JsonInclude(JsonInclude.Include.NON_EMPTY) not working when i use a wrapper class and return the result 【发布时间】:2020-07-12 19:18:01 【问题描述】:

我的控制器代码是

public TestClass<DtoV1> getAllAlliance(@RequestHeader(ID_HEADER) String id,Pageable pageable,                               PagedResourcesAssembler pagedResourcesAssembler)
    

        Page<DtoV1> pageResource  = serviceV1.findPagedPrefixesById(pageable, id);
        PagedResources<DtoV1> pagedResources = pagedResourcesAssembler.toResource(pageResource);
        TestClass<DtoV1> testClass = new TestClass<>(pageResource.getContent(),pagedResources.getLinks());
        return testClass;
    

我的 TestClass Wrapper 是

enter code herepublic class TestClass<T> 


public String name;
public Collection<T> content;
public List<Link> links;
public String[] st= new String[0];
public TestClass(Collection<T> content,List<Link> links)

    this.content = content;
    this.name="sunil";
    this.links = links;

@JsonInclude(JsonInclude.Include.NON_EMPTY)
@JsonProperty("_name")
public String getName()

    return this.name;

@JsonInclude(JsonInclude.Include.NON_EMPTY)
@JsonProperty("_st")
public String[] getSt() 
    return st;


@JsonInclude(JsonInclude.Include.NON_EMPTY)
@JsonProperty("_embedded")
public Collection<T> getContent()

    return this.content;


@JsonInclude(JsonInclude.Include.NON_EMPTY)
@JsonProperty("_links")
public List<Link> getLinks() 
    return this.links;

我的结果是


    "_name": "sunil",
    "_embedded": [
        
            "key": "0000435",
            "type": "Test",
            "issuing": "temp",
            "issued": "temp",
            "dateIssued": "1989-10-22",
            "links": []
        ],
    "_links": [
        
            "rel": "first",
            "href": "http://localhost:8080/v1?page=0&size=20",
            "hreflang": null,
            "media": null,
            "title": null,
            "type": null,
            "deprecation": null
        ]

如果您看到我在测试类中创建了一个 字符串空数组 st,它不会出现,但为什么要休息

使用 @JsonInclude(JsonInclude.Include.NON_EMPTY)

不会出现预期的 null 和空值

【问题讨论】:

它按预期工作。由于您已将@JsonInclude(JsonInclude.Include.NON_EMPTY) 包含在_st 上。它是空字符串数组。它不会出现在结果中 从 getSt() 中移除 @JsonInclude(JsonInclude.Include.NON_EMPTY) @Ajeet47 你没有看到我想要的我想要的 null 值不应该出现,但它们会出现 @SunilKumar 你是说 _links 吗?如果是这种情况,那么您也应该在 Link 类上添加注释。 它是一个 java 类库 【参考方案1】:

问题是第三方对象。因此,如果遵循这个概念,我相信如果它们不包含忽略 null 注释,我们不能忽略 null 或其他类对象为空

要做到这一点,我们可以使用 mixin 和 objectmapper。

【讨论】:

以上是关于@JsonInclude(JsonInclude.Include.NON_EMPTY) 当我使用包装类并返回结果时不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot 中从控制器覆盖 @JsonInclude

jackSon注解– @JsonInclude 注解不返回null值字段

@JsonInclude(Include.NON_NULL)

@JsonInclude(Include.NON_NULL) 如何在 Spring Boot 中工作

@JsonInclude(Include.NON_NULL)

#yyds干货盘点#jackson学习之五:JsonInclude注解