有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaSpringHateoasJaxrsLinkBuilder添加了空字段

我正在尝试将HATEOAS链接添加到我的控制器结果。 链接创建:

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

链接本身创建得很好,但结果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"
        }
      ]

谢谢


共 (1) 个答案

  1. # 1 楼答案

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

    如果你想在使用Jackson进行序列化的NON_NULL对象上包含Link属性,你可以通过使用Jackson MixIn作为带有@JsonInclude(Include.NON_NULL)注释的Link对象来实现

    例如:

    @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();
    }