[SPRING] Spring Boot에서 모든 컨트롤러의 접두어를 지정하는 방법?
SPRINGSpring Boot에서 모든 컨트롤러의 접두어를 지정하는 방법?
나는 / user와 / order에 컨트롤러 매핑을 가지고있다 :
@RestController
@RequestMapping("/users")
public class UserController {
...
}
@RestController
@RequestMapping("/orders")
public class OrderController {
...
}
http : // localhost : 8080 / api / users 및 http : // localhost : 8080 / api / orders에서 각각 URL에 액세스하려고합니다.
스프링 부트에서 어떻게 이것을 할 수 있습니까?
해결법
-
==============================
1.사용자 정의 구성에서 스프링 부트 응용 프로그램의 루트 컨텍스트 경로를 / api / *에 매핑 할 수 있습니다.
사용자 정의 구성에서 스프링 부트 응용 프로그램의 루트 컨텍스트 경로를 / api / *에 매핑 할 수 있습니다.
import org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration; import org.springframework.boot.context.embedded.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.DispatcherServlet; @Configuration public class DispatcherServletCustomConfiguration { @Bean public DispatcherServlet dispatcherServlet() { return new DispatcherServlet(); } @Bean public ServletRegistrationBean dispatcherServletRegistration() { ServletRegistrationBean registration = new ServletRegistrationBean( dispatcherServlet(), "/api/"); registration.setName(DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME); return registration; } }
src \ main \ resources 폴더의 application.properties 파일에 추가하십시오.
server.contextPath=/api/*
더 많은 정보를 원하시면 Spring Boot Context Root와 여기 DispatcherServlet에 서블릿 매핑 추가하기
-
==============================
2.일부 컨트롤러에만 접두사를 추가하려면 다른 두 가지 솔루션을 찾았습니다.
일부 컨트롤러에만 접두사를 추가하려면 다른 두 가지 솔루션을 찾았습니다.
@RestController @RequestMapping(path = "${v1API}/users") public class V1FruitsController { @GetMapping(path = "") @ResponseBody public String list(){ return "[\"Joe\", \"Peter\"]"; } }
application.properties
v1API=/api/v1
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component @RequestMapping("/api/v1") public @interface V1APIController { @AliasFor(annotation = Component.class) String value() default ""; } @V1APIController public class UserController { @RequestMapping("/users") @ReponseBody public String index(){ return "[\"Joe\", \"Peter\"]"; } }
테스트 해봐.
curl -X GET localhost:8080/api/users
-
==============================
3.스프링 부트 2 (스프링 프레임 워크 5)를 사용하는 경우 application.properties에 속성이 대체됩니다.
스프링 부트 2 (스프링 프레임 워크 5)를 사용하는 경우 application.properties에 속성이 대체됩니다.
server.contextPath
에 대한:
server.servlet.context-path=
-
==============================
4.관심이있는 분들은 여기 application.yaml에서 spring.data.rest.basePath 또는 server.servlet.contextPath를 사용할 수 없어서 deFreitas의 Option 2 Component를 Kotlin이 사용합니다. (이것은 Spring 부트 2.1.2와 Kotlin 1.13.11을 사용하는 것입니다)
관심이있는 분들은 여기 application.yaml에서 spring.data.rest.basePath 또는 server.servlet.contextPath를 사용할 수 없어서 deFreitas의 Option 2 Component를 Kotlin이 사용합니다. (이것은 Spring 부트 2.1.2와 Kotlin 1.13.11을 사용하는 것입니다)
package com.myproject.controller import org.springframework.core.annotation.AliasFor import org.springframework.stereotype.Component import org.springframework.web.bind.annotation.RequestMapping import kotlin.annotation.MustBeDocumented import kotlin.annotation.Retention import kotlin.annotation.Target import kotlin.annotation.AnnotationRetention @Target(AnnotationTarget.CLASS, AnnotationTarget.FILE) @Retention(AnnotationRetention.RUNTIME) @MustBeDocumented @Component @RequestMapping("/api/v1") annotation class V1ApiController( @get:AliasFor(annotation = Component::class) val value: String = "" )
IntelliJ를 사용하는 경우 가져 오기를 최적화하면 간결하게 Kotlin 주석 가져 오기가 제거됩니다.
from https://stackoverflow.com/questions/28006501/how-to-specify-prefix-for-all-controllers-in-spring-boot by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 기존 스프링 애플리케이션을 스프링 부트로 마이그레이션하고, 스프링 부트를 수동으로 구성 하시겠습니까? (0) | 2019.01.28 |
---|---|
[SPRING] Spring : 빌더 패턴을 사용하여 빈 작성하기 (0) | 2019.01.28 |
[SPRING] 스프링 부트가 maven-surefire-plugin을 실행하지 못한다. ClassNotFoundException org.apache.maven.surefire.booter.ForkedBooter (0) | 2019.01.28 |
[SPRING] 문자열 값의 자리 표시자를 해결할 수 없습니다. (0) | 2019.01.28 |
[SPRING] 스프링 데이터 JPA 내장 객체 속성으로 찾기 (0) | 2019.01.28 |