@RestController vs @RepositoryRestResource를 사용하는 경우
스프링과 REST를 함께 사용하는 방법에 대한 다양한 예를 살펴보았습니다.우리의 최종 목표는 봄입니다.HATEOAS/HAL세우다
나는 봄 안에 REST를 렌더링하는 두 가지 다른 방법을 보았다.
경유
@RestController컨트롤러 내경유
@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 를 합니다.
@RepositoryRestControllerMVC가 MVC가 아닌 주석@Controller★★★★★★★★★★★★★★★★★」@RestController
이 는 ": " 를 사용합니다.spring.data.rest.basePath라우팅의 베이스 패스로서의 스프링부트 설정.
스프링 데이터 REST 응답 핸들러 덮어쓰기를 참조하십시오.
「 「 」를 추가하는 .@ResponseBody@RepositoryRestController
하지 않은 (「」로 됨)@RepositoryRestResource(exported = false)를 사용합니다@BasePathAwareController 대신 "주석"을 사용합니다.
가방도 주의하세요.
ControllerLinkBuilderREST의 와 Spring Data REST는 되지 않습니다.@RequestMapping 수준에서 하면 안
그리고.
링크 수정 회피책:https://stackoverflow.com/a/51736503/548473
업데이트: 마지막으로 사용하지 않는 것이 좋습니다.@RepositoryRestController해결 방법이 많아서요
언급URL : https://stackoverflow.com/questions/22824840/when-to-use-restcontroller-vs-repositoryrestresource
'source' 카테고리의 다른 글
| react-router v4에서 history.push/Link/Redirect를 포함한 파라미터를 전달하려면 어떻게 해야 합니까? (0) | 2023.02.12 |
|---|---|
| C#을 Oracle 데이터베이스에 연결하기 위해 필요한 최소 클라이언트 설치 공간은 얼마입니까? (0) | 2023.02.12 |
| 일부 요소에 대해 nganimate 사용 안 함 (0) | 2023.02.12 |
| "Newtonsoft에서 항목을 추가하거나 제거할 수 없습니다.Json.Linq.JProperty"를 참조해 주세요. (0) | 2023.02.12 |
| React에서 중첩된 모양에 대한 기본 소품을 제공하려면 어떻게 해야 합니까? (0) | 2023.02.12 |