rest 컨트롤러에 대해서만 기본 URL을 변경하는 방법은 무엇입니까?
예를 들어 my api의 기본 URL이 www.example.com/user/ {id}인 경우 rest 컨트롤러에 대해서만 기본 URL을 변경할 수 있는 구성 옵션이 있습니까?
스프링 부트 v1.3.2를 사용하고 있습니다.
RequestMapping을 추가하여 RestController를 확장하는 사용자 지정 주석을 생성하려고 했습니다.여기 예가 있지만 작동하지 않습니다.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@RestController
@RequestMapping(value = "/rest", path = "/rest")
public @interface MyRestController { }
옵션 1: 사용자 지정 주석
기본 URL을 선언하는 사용자 지정 주석을 생성하고 @RestController 대신 사용합니다.
사용자 지정 RestControllerAnnotation.java
package com.example.stackoverflow.config;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@RestController
@RequestMapping("/rest")
public @interface CustomRestControllerAnnotation {}
첫 번째 RestController.java
package com.example.stackoverflow.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.example.stackoverflow.config.CustomRestControllerAnnotation;
@CustomRestControllerAnnotation
public class FirstRestController {
@RequestMapping("/first")
public String firstMethod(){
return "First Controller";
}
}
두 번째 RestController.java
package com.example.stackoverflow.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.example.stackoverflow.config.CustomRestControllerAnnotation;
@CustomRestControllerAnnotation
public class SecondRestController {
@RequestMapping("/second")
public String secondMethod(){
return "Second Controller";
}
}
옵션 2: 기본 받침대 컨트롤러
모든 실제 컨트롤러의 템플릿 역할을 하는 기본 컨트롤러를 생성하면 단일 위치에서 루트 URL을 효과적으로 관리할 수 있습니다.
BaseRestController.java
package com.example.stackoverflow.controller;
import org.springframework.web.bind.annotation.RequestMapping;
@RequestMapping("/rest")
public class BaseRestController {}
그런 다음 모든 실제 컨트롤러에 대해 이 클래스를 확장하면 됩니다.
첫 번째 RestController.java
package com.example.stackoverflow.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class FirstRestController extends BaseRestController{
@RequestMapping("/first")
public String firstMethod(){
return "First Controller";
}
}
두 번째 RestController.java
package com.example.stackoverflow.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SecondRestController extends BaseRestController{
@RequestMapping("/second")
public String secondMethod(){
return "Second Controller";
}
}
옵션 3: 스프링 데이터 REST
컨트롤러가 저장소에서 데이터를 제공하는 경우 Spring Data REST는 보일러 플레이트의 대부분을 제거하고 초기 문제를 해결할 수 있습니다.
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
이 종속성을 선언하면 모든 리포지토리가 자동으로 REST를 사용하도록 설정됩니다.
속성 파일을 사용하여 기본 URL을 제어할 수 있습니다.
application.properties
spring.data.rest.basePath=/rest
Spring Boot v2.1.0에 대한 구성 업데이트
Spring Boot v2.1.0에서 기본 URL을 구성할 수 있습니다.application.properties
맘에 들다
server.servlet.context-path = /baseApiName
일반적으로 모든 요청(또는 특정 집합)을 처리하는 서블릿을 정의합니다.그런 다음 서블릿에게 다음과 같은 특정 URL 패턴을 들으라고 말할 것입니다./rest
.그@RequestMapping
컨트롤러의 주석은 해당 '최상위' 패턴을 인식하지 못합니다.
예를 들어 Spring Web Application을 부트스트랩할 때 수동으로 해당 안정적인 서블릿을 만들고 매핑을 추가할 수 있습니다.전체 설정이 너무 커서 여기에 게시할 수 없습니다. 하지만 아래의 일부 내용을 참조하여 개념을 확인하십시오.
import org.springframework.web.servlet.DispatcherServlet;
import javax.servlet.ServletContext;
...
public class WebAppInitializer implements WebApplicationInitializer {
public void onStartup(ServletContext servletContext) throws ServletException {
...
ServletRegistration.Dynamic restfulServlet = servletContext.addServlet("myServlet", new DispatcherServlet(rootContext));
restfulServlet.addMapping("/rest/*");
...
}
추가해야 합니다.server.servlet-path=/api
application.properties 파일 및 domain/api/users/{id}와 같이 보내야 하는 모든 요청
언급URL : https://stackoverflow.com/questions/38212691/how-to-change-base-url-only-for-rest-controllers
'programing' 카테고리의 다른 글
Docker 바탕 화면에서 데이터 볼륨 찾기(Windows) (0) | 2023.08.05 |
---|---|
PHP DateTime __construct() 위치 x에서 시간 문자열(xxxxxxxx)을 구문 분석하지 못했습니다. (0) | 2023.08.05 |
npm을 사용하여 "devDependencies"만 설치하는 방법 (0) | 2023.08.05 |
javax 유효성 검사 제약 조건이 Spring Boot에서 작동하지 않음 (0) | 2023.08.05 |
Oracle 내보내기 덤프 파일의 내용 나열 (0) | 2023.08.05 |