복붙노트

[SPRING] @RestController 대 @RepositoryRestResource를 사용하는 경우

SPRING

@RestController 대 @RepositoryRestResource를 사용하는 경우

Spring을 REST와 함께 사용하는 방법에 대한 다양한 예제를 살펴 보았다. 우리의 목표는 스프링 HATEOAS / HAL 설정이다.

Spring 내에서 REST를 렌더링하는 두 개의 별개의 메소드를 보았다.

내가 찾는데 힘들어하는 이유는 왜 다른 것을 사용하는 것입니까? HAL을 구현하려고 할 때 가장 좋습니다.

데이터베이스 백엔드는 Neo4j입니다.

해결법

  1. ==============================

    1.좋아, 짧은 이야기는 @RepositoryRestResource를 Spring JPA로 HATEOAS 서비스를 만들기 때문에 사용하고 싶다는 것이다. 이 주석을 추가하고이를 Pojo에 연결하는 것을 볼 수 있듯이 저장소 메소드 또는 REST 서비스 메소드를 구현하지 않고도 완벽하게 기능하는 HATEOAS 서비스가있다.

    좋아, 짧은 이야기는 @RepositoryRestResource를 Spring JPA로 HATEOAS 서비스를 만들기 때문에 사용하고 싶다는 것이다. 이 주석을 추가하고이를 Pojo에 연결하는 것을 볼 수 있듯이 저장소 메소드 또는 REST 서비스 메소드를 구현하지 않고도 완벽하게 기능하는 HATEOAS 서비스가있다.

    @RestController를 추가하면 스스로 노출하려는 각 메소드를 구현해야하며 HATEOAS 형식으로 내 보내지 않습니다.

  2. ==============================

    2.엔티티 관련 작업 수행 여부에 따라 @BasePathAwareController 또는 @RepositoryRestController 중 하나를 사용하는 세 번째 및 네 번째 옵션이 있습니다.

    엔티티 관련 작업 수행 여부에 따라 @BasePathAwareController 또는 @RepositoryRestController 중 하나를 사용하는 세 번째 및 네 번째 옵션이 있습니다.

    @RepositoryRestResource는 공개 Repository 인터페이스에서 옵션을 설정하는 데 사용됩니다. 확장되는 저장소의 유형 (예 : CrudRepository / PagingAndSortingRepository / etc)에 따라 적절하게 끝점을 자동으로 만듭니다.

    @BasePathAwareController 및 @RepositoryRestController는 수동으로 엔드 포인트를 작성하지만 사용자가 설정 한 Spring Data REST 구성을 사용하려는 경우에 사용됩니다.

    @RestController를 사용하면 다른 구성 옵션 (즉, 다른 메시지 변환기, 다른 오류 처리기 등)을 사용하여 병렬 엔드 포인트 세트를 작성할 수 있습니다. 그러나 이들은 행복하게 공존하며 혼동을 일으킬 수 있습니다.

    구체적인 문서는 여기에서 찾을 수 있습니다.

  3. ==============================

    3.글쎄, 위의 답변은 그들의 맥락에서 여전히 올바른 당신에게 실용적인 예제를 제공하고 있습니다.

    글쎄, 위의 답변은 그들의 맥락에서 여전히 올바른 당신에게 실용적인 예제를 제공하고 있습니다.

    API의 일부인 많은 시나리오에서 특정 기준에 따라 엔티티를 검색하기위한 끝점을 제공해야합니다. 이제 JPA를 사용하면 쿼리를 작성하지 않고도 Spring-JPA의 특정 명칭으로 인터페이스와 메소드를 만들 수 있습니다. 이러한 API를 공개하기 위해 단순히 이러한 저장소 메소드를 호출하는 서비스 계층을 만들고 마지막으로 서비스 계층을 호출하여 끝점을 표시하는 컨트롤러를 만듭니다.

    Spring이 여기에서 한 일은 일반적으로 검색 엔티티에 대한 호출이며 백그라운드에서 최종 인터페이스를 생성하는 데 필요한 파일을 생성하는 인터페이스 (저장소)에서 이러한 끝점을 노출 할 수있게합니다. 따라서 @RepositoryRestResource를 사용한다면 Service / Controller 레이어를 만들 필요가 없습니다.

    반면 @RestController는 json 데이터를 특별히 다루고 컨트롤러로 작업하는 컨트롤러입니다. 짧은 @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

  4. ==============================

    4.@RepositoryRestController는 노출 된 저장소에서 기본 생성 Spring 데이터 REST 컨트롤러를 무시합니다.

    @RepositoryRestController는 노출 된 저장소에서 기본 생성 Spring 데이터 REST 컨트롤러를 무시합니다.

    예 :이 컨트롤러는 spring.data.rest.basePath Spring 부트 설정을 라우팅의 기본 경로로 사용합니다.

    Spring 데이터 REST 응답 핸들러 겹쳐 쓰기를 참조하십시오.

    @RepositoryRestController에서 @ResponseBody가 누락 된 것을주의하십시오.

    노출 된 저장소가 없다면 (@RepositoryRestResource (exported = false)로 표시됨) 대신 @BasePathAwareController 주석을 사용하십시오

    가방에 대해서도 알아 두십시오.

    ControllerLinkBuilder는 스프링 데이터 REST의 기본 경로를 고려하지 않으며 클래스 / 유형 수준에서 @RequestMapping을 사용하면 안됩니다

    기본 경로가 HAL에 표시되지 않음

    링크 수정 방법 : https://stackoverflow.com/a/51736503/548473

  5. from https://stackoverflow.com/questions/22824840/when-to-use-restcontroller-vs-repositoryrestresource by cc-by-sa and MIT license