source

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

bestscript 2023. 2. 12. 18:06

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

스프링과 REST를 함께 사용하는 방법에 대한 다양한 예를 살펴보았습니다.우리의 최종 목표는 봄입니다.HATEOAS/HAL세우다

나는 봄 에 REST를 렌더링하는 두 가지 다른 방법을 보았다.

  1. 경유@RestController컨트롤러 내

  2. 경유@RepositoryRestResource저장소 내

내가 찾기가 힘든 것은 왜 하나를 다른 것보다 더 많이 사용하느냐는 것이다.구현하려고 할 때HAL어느 것이 가장 좋습니까?

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

좋아요, 그럼 간단히 말하자면,@RepositoryRestResourceSpring JPA에서 HATEOAS 서비스가 생성되기 때문입니다.

이 주석을 추가하여 Pojo에 링크하는 처럼 저장소 방식이나 REST 서비스 방식을 구현할 필요 없이 완전한 기능을 갖춘HATEOAS 서비스를 이용할 수 있습니다.

를 추가하면@RestController그 후, 공개하는 각 메서드를 실장할 필요가 있습니다.또, 이 메서드는 HATEOAS 형식으로 export 되지 않습니다.

세 번째(및 네 번째) 옵션은 엔티티 고유의 액션을 수행하는지 여부에 따라 @BasePathAwareController 또는 @RepositoryRestController 중 하나를 사용합니다.

@RepositoryRestResource는 퍼블릭 저장소 인터페이스에서 옵션을 설정하기 위해 사용됩니다.확장되는 저장소 유형(CrudRepository/PagingAndSortingRepository 등)에 따라 엔드포인트가 자동으로 생성됩니다.

@BasePathAwareController 및 @RepositoryRestController는 엔드포인트를 수동으로 만들지만 설정한 Spring Data REST 구성을 사용할 때 사용됩니다.

@RestController를 사용하면 다른 설정 옵션(즉, 다른 메시지컨버터, 다른 에러 핸들러 등)을 가진 병렬 엔드포인트 세트를 만들 수 있지만, 이러한 엔드포인트들은 행복하게 공존할 수 있습니다(아마도 혼란을 일으킬 수 있습니다).

구체적인 매뉴얼은 이쪽에서 찾을 수 있습니다.

자, 위의 답변은 그 맥락에 맞는 답이지만, 저는 여러분에게 실제적인 예를 제시하겠습니다.

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

여기서 Spring은 이러한 엔드포인트를 이러한 인터페이스(리포지토리)에서 공개할 수 있습니다.이 인터페이스(리포지토리)는 일반적으로 엔티티를 검색하기 위한 GET 콜이며 백그라운드에서 최종 엔드포인트를 작성하기 위해 필요한 파일을 생성합니다.따라서 @RepositoryRestResource를 사용하는 경우 서비스/컨트롤러 계층을 만들 필요가 없습니다.

한편, @RestController는 컨트롤러로서 json 데이터와 rest works를 특별히 취급하는 컨트롤러입니다.요약하면 @Controller + @ResponseBody = @RestController입니다.

이게 도움이 됐으면 좋겠다.

를 참조해 .「 」
http://sv-technical.blogspot.com/2015/11/spring-boot-and-repositoryrestresource.htmlhttpsv-technical.blogspot.com/2015/11/.html
https://github.com/svermaji/Spring-boot-with-hibernate-no-controllerhttpsgithub.com/svermaji/

@RepositoryRestControllerSpring Data REST를 사용합니다.

REST 하려면 Spring Data REST 를 합니다.@RepositoryRestController MVC가 MVC가 아닌 주석@Controller ★★★★★★★★★★★★★★★★★」@RestController

이 는 ": " 를 사용합니다.spring.data.rest.basePath라우팅의 베이스 패스로서의 스프링부트 설정.

스프링 데이터 REST 응답 핸들러 덮어쓰기를 참조하십시오.

「 「 」를 추가하는 .@ResponseBody@RepositoryRestController

하지 않은 (「」로 됨)@RepositoryRestResource(exported = false)를 사용합니다@BasePathAwareController 대신 "주석"을 사용합니다.

가방도 주의하세요.

ControllerLinkBuilderREST의 와 Spring Data REST는 되지 않습니다.@RequestMapping 수준에서 하면 안

그리고.

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

링크 수정 회피책:https://stackoverflow.com/a/51736503/548473

업데이트: 마지막으로 사용하지 않는 것이 좋습니다.@RepositoryRestController해결 방법이 많아서요

언급URL : https://stackoverflow.com/questions/22824840/when-to-use-restcontroller-vs-repositoryrestresource