Я пытаюсь добавить ссылки 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"
}
]
Спасибо.




Как вы упомянули, если вы хотите включить свойство NON_NULL во весь JSON, а не только links, вы можете использовать spring.jackson.default-property-inclusion=NON_NULL. Однако это не исправит пустые поля шаблона.
Если вы хотите включить свойство NON_NULL только для объекта Link, используя 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();
}
@ kros365 Это правда - для этого потребуется дополнительная настройка MixIn (либо NON_DEFAULT, либо игнорирование), я обновлю свой ответ, чтобы отразить это.
Я использую org.springframework.hateoas.ResourceSupport и JaxRsLinkBuilder для создания ссылки. Не проблема создать пользовательскую ссылку, просто я подумал, что есть способ настроить это решение.
@ kros365 ответ выше должен охватывать настройку сериализации в соответствии с вашим запросом, либо с помощью JsonIgnore, чтобы полностью игнорировать свойства, либо скрывать их только тогда, когда они равны нулю. Дайте мне знать, если что-то не ясно.
В любом случае с этим свойством поле "шаблон" останется.