Spring hateoas jaxrslinkbuilder добавляет пустые поля - PullRequest
1 голос
/ 07 июня 2019

Я пытаюсь добавить ссылки 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 голос
/ 07 июня 2019

Как вы упоминаете, если вы хотите включить NON_NULL свойство для всего JSON, а не только links, вы можете использовать spring.jackson.default-property-inclusion=NON_NULL.Однако это не исправит пустые поля шаблона.

Если вы хотите, чтобы свойство NON_NULL было включено только для объекта Link с использованием Jackson для сериализации, вы можете добиться этого с помощью Jackson MixIn для объекта 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...