Spring hateoas jaxrslinkbuilder 添加空字段

Spring hateoas jaxrslinkbuilder adds null fields

我正在尝试将 HATEOAS links 添加到我的控制器结果中。 Link创作:

       Link link = JaxRsLinkBuilder.linkTo(MainRestService.class)
                    .slash(this::getVersion)
                    .slash(LinkMappingConstants.TAXPAYERS)
                    .slash(taxPayerId)
                    .slash(LinkMappingConstants.ESTIMATIONS)
                    .slash(estimationId)
                    .withSelfRel();

link 本身创建的很好,但是结果 JSON:

中有多余的条目
"links": [
        {
          "rel": "self",
          "href": "http://localhost:8080/blablabla",
          "hreflang": null,
          "media": null,
          "title": null,
          "type": null,
          "deprecation": null,
          "template": {
            "variables": [

            ],
            "variableNames": [

            ]
          }
        }
      ]

我怎样才能得到这种格式? (不使用 属性 spring.jackson.default-property-inclusion=NON_NULL

"links": [
        {
          "rel": "self",
          "href": "http://localhost:8080/blablabla"
        }
      ]

谢谢。

正如您提到的,如果您想要 NON_NULL 属性 包含整个 JSON 而不仅仅是 links,您可以使用 spring.jackson.default-property-inclusion=NON_NULL。但是,这不会修复空模板字段。

如果您希望使用 Jackson 将 NON_NULL 属性 仅包含在 Link 对象上进行序列化,您可以通过对 Link 带有 @JsonInclude(Include.NON_NULL) 注释的对象。

举个例子:

@JsonInclude(Include.NON_NULL)
abstract class LinkMixIn {
}
mapper.addMixIn(Link.class, LinkMixIn.class);

要隐藏模板字段,如果您不想序列化模板部分,您可以添加 @JsonIgnore,或者尝试 NON_DEFAULT 属性 包含在上面的答案中,这会创建一个新的实例对象并将其与要序列化的内容进行比较以确定是否应包含它。

例如像下面这样的东西根本不会序列化 getTemplate 的结果

@JsonInclude(Include.NON_NULL)
abstract class LinkMixIn {
    @JsonIgnore abstract Template getTemplate();
}