리포지토리 RestHandler 매핑 및 EndpointHandler 매핑을 사용하지 않도록 설정하는 방법은 무엇입니까?
현재 Spring Boot, Hibernate 및 Spring-HATE OAS를 사용하여 REST 인터페이스를 갖춘 애플리케이션을 구축하고 있습니다.내 데이터 모델은 다음과 같은 이점이 있습니다.@Entity
주석 및 Spring의 기능을 사용하여 최대 절전 모드 저장소를 자동으로 설정합니다(확장 인터페이스 만들기PagingAndSortingRepository
. 내 응용 프로그램은 완전히 주석 중심입니다. 즉, 나는 없습니다.web.xml
하지만 스프링 주석으로 모든 것을 구성합니다.@Configuration
,@Bean
등등, 그리고 나의 것에서 애플리케이션을 시작합니다.main
의 도움을 받는 방법SpringApplication.run(MyApp.class, args);
이것은 잘 작동하지만, 이 접근법으로,RepositoryRestHandlerMapping
그리고.EndpointHandlerMapping
생성됩니다.이것들은 제가 필요하지도 않고 원하지도 않는 많은 자원을 만들어냅니다.표준 논리보다 더 많은 작업이 필요하기 때문에 자체 컨트롤러를 구현합니다.
이 기본 동작을 방지하고 이러한 매핑을 사용하지 않도록 설정하려면 어떻게 해야 합니까?
기본 클래스에서 RepositoryRestMvcAutoConfiguration을 제외합니다.
@EnableAutoConfiguration(exclude = RepositoryRestMvcAutoConfiguration.class)
다른 REST 기능이 필요해요, 예를 들면@RestController
주석하지만 저는 이제 실현 가능한 해결책을 찾았습니다.
RepositoryRestHandlerMapping
사용할 수 없도록 설정하면 안 되지만, 다음을 사용하여 저장소에 주석을 추가하여 저장소 내보내기를 사용할 수 있습니다.@RepositoryRestResource(exported = false)
모든 리포지토리에서 이 작업을 수행했으며 이제 와일드카드 리소스는 여전히 설치되어 있지만 이를 해결하기 위해 등록된 리포지토리가 없으므로 와일드카드 리소스는 사실상 사라집니다.그러한 자원에 접근하려고 시도하는 것은 다음과 같습니다.404
역시
에도 마찬가지입니다.EndpointHandlerMapping
에서 비롯되는spring-boot-actuator
다음과 같은 일부 엔드포인트를 설치합니다./info
,/metrics
등. 이것은 편리하고 REST 응용 프로그램에 있어야 합니다. 제가 Eureka 서버에 응용 프로그램을 등록하면 자동으로 이러한 응용 프로그램 중 일부에 대한 링크가 생성됩니다.이를 올바르게 사용하려면 예를 들어 엔드포인트를 다음과 같이 구성할 수 있습니다.@Bean
다음과 같이:
@Configuration
public class InfoConfiguration {
@Bean
public InfoEndpoint infoEndpoint {
Map<String, Object> info = ...
return new InfoEndpoint(info);
}
}
그info
위는 상수 정보입니다. 변경될 수 있는 정보가 있으면 재정의할 수 있습니다.InfoEndpoint
의 맞춤형 구현을 제공합니다.getAdditionalInfo()
.
코틀린
특정 리소스 제외:특정 리포지토리만 제외하려면 특정 인터페이스에서 아래 코드를 사용하십시오. 컨트롤러의 매핑은 계속 작동합니다.
@Repository @RestResource(exported = false) interface SongRepository : JpaRepository<Song, Int>
전체:전체를 제외하려면 기본 클래스에서 이전 답변의 Kotlin 버전을 사용합니다.
@SpringBootApplication @EnableAutoConfiguration(exclude = arrayOf(RepositoryRestMvcAutoConfiguration::class)) class WebserviceApplication
의존성 이하의 사용
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
대신에
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
HAL 리소스의 자동 생성은 종속성 아래에 추가할 때도 기본 제공됩니다.
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-rest-hal-explorer</artifactId>
</dependency>
종속성 이름에서 알 수 있듯이 HAL 탐색기 링크가 자동으로 생성됩니다.
컨트롤러를 자동으로 만들지 않으려면 이 종속성을 삭제합니다.
언급URL : https://stackoverflow.com/questions/26739346/how-to-disable-repositoryresthandlermapping-and-endpointhandlermapping
'programing' 카테고리의 다른 글
Oracle 데이터베이스에서 ROWNUM과 ROW_NUMBER의 차이점은 무엇입니까? (0) | 2023.06.25 |
---|---|
\t와 \b는 무엇을 합니까? (0) | 2023.06.25 |
SQLPlus를 사용하여 Oracle 저장 프로시저를 보는 방법 (0) | 2023.06.25 |
확인하지 못했습니다. com.google.파이어베이스:파이어베이스 코어:16.0.1 (0) | 2023.06.25 |
Lando 인스턴스 내부에 심볼 링크 만들기 (0) | 2023.06.25 |