source

Spring boot: 여러 RestController에 대한 공통 경로 설정 방법

manysource 2023. 6. 29. 20:13

Spring boot: 여러 RestController에 대한 공통 경로 설정 방법

스프링 부트를 사용하여 api를 작성하고 있으며 모든 리소스를 공통 기본 경로(/api) 뒤에 매핑하려고 합니다.그러나 (예를 들어 @RequestMapping으로 주석을 달아서) 각 RestController 클래스에 주석을 달지 않습니다.저는 다음과 같은 해결책에 대해 생각해 보았지만 모두 제가 원하지 않는 단점이 있습니다.

  • 기본 클래스(예: ApiRestController)를 만들고 다른 모든 RestController가 이 클래스를 상속합니다.이는 클래스 수준의 @Requestmapping이 기본 클래스와 구현 클래스 간에 병합되지 않는다는 단점이 있습니다.
  • 모든 RestController에 주석을 달지만 이는 코드 중복으로 이어집니다.
  • server.context-path 속성을 변경합니다.이는 모든 엔드포인트가 이 기본 경로를 사용한다는 단점이 있습니다.작동기 프로젝트에 의해 노출된 엔드포인트도 마찬가지입니다.
  • 사용자 지정 디스패처 서블릿 및 서블릿 등록 빈 사용.그러나 이는 server.context-path를 변경하는 것과 동일한 효과가 있는 것 같습니다.

제가 요약한 솔루션의 단점 없이 이를 수행할 수 있는 방법을 아는 사람이 있습니까?이 프로젝트는 REST 기반 백엔드만 노출하고 정적 콘텐츠는 서버에 제공하지 않습니다(가능한 솔루션에 영향을 미치는지 여부는 알 수 없음).Rest 컨트롤러도 여러 패키지에 걸쳐 분할됩니다.

감사해요.

모든 RestController에 @RequestMapping("/api")을 설치하는 것이 어떻습니까?

@RestController
@RequestMapping("/api")
public class UserApi {
    @RequestMapping("/user")
    public String user() {
        ...
    }
}

다음을 포함하는 사용자 정의 주석을 생성할 수 있습니다.@RestController그리고.@RequestMapping:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@RestConntroller
@RequestMapping(value = "/api" )
@interface MyController {

}

@path 주석을 사용하여 여러 URI를 단일 URI로 간주할 수 있습니다.

@Path("sampleresource/{Filepath:.*}")
public interface SampleResource {
    @GET
    @Produces({ MediaType.TEXT_PLAIN })
    @Path("/hello")
    public Response sayHello();
}

비슷한 질문에 대한 제 대답을 보세요.모든 컨트롤러에 대해 기본 @RestController URI 접두사를 구성하는 방법은 무엇입니까?사용자 지정 주석을 생성하고 이를 기반으로 매핑만 수행할 수 있습니다.

언급URL : https://stackoverflow.com/questions/33711986/spring-boot-how-to-set-a-common-path-for-multiple-restcontrollers