Когда использовать @RestController vs @RepositoryRestResource



Я рассматривал различные примеры того, как использовать весну с отдыхом. Наша конечная цель-Установка Spring HATEOAS / HAL



Я видел два различных метода для рендеринга отдыха в течение весны




  1. через @RestController в контроллере


  2. через @RepositoryRestResource в репозитории



то, что я изо всех сил пытаюсь найти, почему бы вам использовать один над другим. При попытке реализовать HAL, который является лучше всего?



бэкэнд нашей базы данных-Neo4j.

880   4  

4 ответов:

Итак, короткая история заключается в том, что вы хотите использовать @RepositoryRestResource, так как это создает службу HATEOAS с Spring JPA. Как видите здесь добавление этой аннотации и связывание ее с Pojo у вас есть полностью функциональный сервис HATEOAS без необходимости реализации метода репозитория или методов службы REST

Если вы добавляете @RestController, то вам нужно реализовать каждый метод, который вы хотите выставить самостоятельно, а также не экспортировать это в формате HATEOAS

существует третий (и четвертый) вариант, который вы не описали, который должен использовать либо @BasePathAwareController, либо @RepositoryRestController, в зависимости от того, выполняете ли вы действия, специфичные для сущности, или нет.

@RepositoryRestResource используется для установки параметров в интерфейсе публичного репозитория-он автоматически создает конечные точки в зависимости от типа расширяемого репозитория (т. е. CrudRepository / PagingAndSortingRepository / etc).

@BasePathAwareController и @RepositoryRestController используются, когда вы хотите вручную создать конечные точки, но хотите использовать конфигурации Spring Data REST, которые вы настроили.

Если вы используете @RestController, вы создадите параллельный набор конечных точек с разные параметры конфигурации-т. е. другой конвертер сообщений, разные обработчики ошибок и т. д. - Но они будут счастливо сосуществовать (и наверное, вызывают недоумение).

конкретную документацию можно найти здесь.

Ну, выше ответы верны в их контексте до сих пор я даю вам практический пример.

во многих сценариях как часть API нам нужно предоставить конечные точки для поиска сущности на основе определенных критериев. Теперь с помощью JPA вам не нужно даже писать запросы, просто сделайте интерфейс и методы с определенной номенклатурой Spring-JPA. Чтобы выставить такие API, вы сделаете сервисный уровень, который просто вызовет эти методы репозитория и, наконец, контроллеры, которые будут предоставление конечных точек путем вызова уровня сервиса.

то, что Spring сделал здесь, позволяет вам выставлять эти конечные точки из таких интерфейсов (репозиториев), которые обычно получают вызовы для поиска сущности и в фоновом режиме генерируют необходимые файлы для создания конечных конечных точек. Поэтому, если вы используете @RepositoryRestResource, то нет необходимости создавать уровень сервиса/контроллера.

с другой стороны @RestController-это контроллер, который специально занимается данными json и работой rest как a контроллер. Короче говоря @Controller + @ResponseBody = @RestController.

надеюсь, что это помогает.

смотрите мой рабочий пример и блог для того же:
http://sv-technical.blogspot.com/2015/11/spring-boot-and-repositoryrestresource.html
https://github.com/svermaji/Spring-boot-with-hibernate-no-controller

@RepositoryRestController переопределить созданные по умолчанию контроллеры REST данных Spring из открытого репозитория.

чтобы воспользоваться настройками Spring Data REST, конвертерами сообщений, обработкой исключений и т. д., Используйте @RepositoryRestController аннотация вместо стандартной пружины MVC @Controller или @RestController

например, эти контроллеры используют spring.data.rest.basePath Spring Boot настройка в качестве базового пути для маршрутизации.

посмотреть переопределяя ответ остальных данных весны Обработчики.

будьте в курсе добавления @ResponseBody как это пропустили в @RepositoryRestController

если вы не выставили репозиторий (помечен как @RepositoryRestResource(exported = false)), используйте аннотации

также имейте в виду сумки

ControllerLinkBuilder не учитывает базовый путь Spring Data REST и @RequestMapping не следует использовать на уровне класса / типа

и

базовый путь не отображается в Хэл

обходной путь для исправления ссылки:https://stackoverflow.com/a/51736503/548473

Comments

    Ничего не найдено.