#spring #rest #spring-hateoas
#spring #rest #spring-hateoas
Вопрос:
Я просматривал документы и реализацию Restbucks от Oliver, но, похоже, я не могу настроить ссылки на сгенерированный ресурс репозитория Spring REST. (Я могу добавить к ним, но не могу удалить их через ResourceProcessor, поскольку процессор вызывается до преобразования, судя по всему)
Мой случай довольно прост, и я хочу опустить ссылки rel на объекты, которые указывают на null или пустые коллекции (например, в случае, скажем, родительской / дочерней структуры графического узла)
У кого-нибудь есть какие-либо соображения относительно того, как я мог бы этого добиться? В идеале я хотел бы иметь что-то предложенное в Restbucks README (но я не могу найти его используемым), где было бы выбрано пользовательское расширение RestResourceEntityLinks и ссылки, сгенерированные из указанной реализации, поскольку мой случай применим ко всем объектам домена.
Но, возможно, есть более простой способ, с которым мне еще предстоит столкнуться? Или, возможно, наличие этих ссылок, указывающих на пустой массив или null, является допустимой ссылкой hateoas, поэтому я должен просто оставить это и двигаться дальше?
Заранее спасибо
Ответ №1:
Вообще говоря, вы должны иметь возможность удалять ссылки, просто вызывая Resource.getLinks()
и путаясь с List
возвращенными. Если вы считаете, что Resource.removeLink(String rel)
имеет смысл, не стесняйтесь создавать для этого тикет.
Однако я бы сказал, что ссылки, указывающие на пустые ресурсы, имеют смысл, поскольку наличие ссылок играет важную роль в сообщении клиенту о наличии связанного ресурса, с которым он может взаимодействовать. Другими словами: если ссылка недоступна, как клиент узнает о возможности назначить связанный ресурс или добавить элемент в текущую пустую коллекцию.
Ссылки не только представляют текущее состояние ресурса, но и предоставляют возможности для того, что клиент должен / может сделать дальше. Возьмем, к примеру, payment
ссылку в проекте RESTBucks. Это присутствует только в том случае, если платеж еще не был размещен. После завершения ссылка даже исчезает. На самом деле это противоположно тому, к чему вы стремитесь :).
Комментарии:
1. Спасибо, Оливер, приятно слышать это прямо из уст лошади. Я не думаю, что наличие removeLink необходимо, поскольку вы можете изменять ссылки, используя ссылку на список, как вы упомянули. Я думаю, что в моем случае удаление ссылок, вероятно, сродни сценарию с платежной ссылкой (поскольку корневой родительский узел не должен отображать родительскую ссылку). Я попробовал то, что вы предложили в ResourceProcessor, но поскольку ссылки, похоже, на данный момент еще не сгенерированы (для объектов, на которые ссылаются) Я не могу их удалить. Вы рекомендуете, чтобы этот процесс выполнялся на уровне контроллера? Спасибо за ваш быстрый ответ
2. После создания приложения, которое использует RESTful API, я теперь понимаю, что вы имеете в виду относительно того, как удаление ссылок, указывающих на пустые ресурсы, не имеет смысла, поскольку идентификация rel все еще должна быть сохранена (следовательно, обнаружение нулевого значения допустимо)