[SPRING] SimpleUrlHandlerMapping의 Java 구성 (스프링 부트)
SPRINGSimpleUrlHandlerMapping의 Java 구성 (스프링 부트)
AbstractController를 확장하는 두 개의 컨트롤러를 사용하는 기존의 Spring 웹 애플리케이션이 있습니다. Spring Boot를 응용 프로그램에 통합하여 독립 실행 형 응용 프로그램으로 실행할 수 있습니다.
Spring이 내 컨트롤러로 호출을 전달하지 않기 때문에 문제가 발생했습니다. 어떻게 컨트롤러를 "/ app / *"와 같은 URL 패턴에 매핑 할 수 있습니까?
SampleController.java
@Controller("myController")
public class SampleController extends AbstractController {
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
response.getWriter().print("Hello world!");
return null;
}
}
Application.java
@EnableAutoConfiguration
@Configuration
@ComponentScan
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
@Bean
public SimpleUrlHandlerMapping sampleServletMapping() {
SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
Properties urlProperties = new Properties();
urlProperties.put("/index", "myController");
mapping.setMappings(urlProperties);
return mapping;
}
}
응용 프로그램을 시작할 때 다음과 같은 메시지가 나타납니다.
INFO [org.springframework.web.servlet.handler.SimpleUrlHandlerMapping] Mapped URL path [/index] onto handler 'myController'
그러나 / index에 요청을 보내면 다음 메시지가 표시됩니다.
DEBUG [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping] Looking up handler method for path /index
DEBUG [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping] Did not find handler method for [/index]
DEBUG [org.springframework.web.servlet.handler.SimpleUrlHandlerMapping] Matching patterns for request [/index] are [/**]
DEBUG [org.springframework.web.servlet.handler.SimpleUrlHandlerMapping] URI Template variables for request [/index] are {}
DEBUG [org.springframework.web.servlet.handler.SimpleUrlHandlerMapping] Mapping [/index] to HandlerExecutionChain with handler [org.springframework.web.servlet.resource.ResourceHttpRequestHandler@11195d3e] and 1 interceptor
해결법
-
==============================
1.SimpleUrlHandlerMappings가 순서 붙일 수 있고, javadoc에 설명되어있는대로, 디폴트는 Integer.MAX_VALUE로, 가능한 한 최우선을 나타냅니다. 이로 인해 ResourceHttpRequestHandler가 (기본적으로 / **에 매핑되고 Integer.MAX_VALUE - 1의 순서를 가짐) 컨트롤러에 대한 매핑보다 우선합니다.
SimpleUrlHandlerMappings가 순서 붙일 수 있고, javadoc에 설명되어있는대로, 디폴트는 Integer.MAX_VALUE로, 가능한 한 최우선을 나타냅니다. 이로 인해 ResourceHttpRequestHandler가 (기본적으로 / **에 매핑되고 Integer.MAX_VALUE - 1의 순서를 가짐) 컨트롤러에 대한 매핑보다 우선합니다.
sampleServletMapping () 메소드를 업데이트하여 매핑의 순서를 Integer.MAX_VALUE - 1보다 작은 값으로 설정합니다. 예를 들면 다음과 같습니다.
@Bean public SimpleUrlHandlerMapping sampleServletMapping() { SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping(); mapping.setOrder(Integer.MAX_VALUE - 2); Properties urlProperties = new Properties(); urlProperties.put("/index", "myController"); mapping.setMappings(urlProperties); return mapping; }
from https://stackoverflow.com/questions/25037113/java-configuration-of-simpleurlhandlermapping-spring-boot by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] PostGIS Geometry로 Hibernate 지속 실패 (0) | 2019.03.22 |
---|---|
[SPRING] Spring 배치 - 여러 작업을 병렬로 실행 (0) | 2019.03.22 |
[SPRING] 스프링 MVC에서 RESTful 삭제를 처리하는 방법 (0) | 2019.03.21 |
[SPRING] context : property-placeholder가 참조를 해석하지 않습니다. (0) | 2019.03.21 |
[SPRING] 봄 보안 (3.0.x) 및 사용자 가장 (0) | 2019.03.21 |