programing

리포지토리 RestHandler 매핑 및 EndpointHandler 매핑을 사용하지 않도록 설정하는 방법은 무엇입니까?

i4 2023. 6. 25. 18:22
반응형

리포지토리 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

반응형