[SPRING] RequestMapping 우선 순위 지정 방법
SPRINGRequestMapping 우선 순위 지정 방법
다음과 같은 RequestMapping이 필요한 상황이 있습니다.
@RequestMapping(value={"/{section}"})
...method implementation here...
@RequestMapping(value={"/support"})
...method implementation here...
명백한 충돌이 있습니다. 내 희망은 Spring이이 문제를 자동으로 해결하고 두 번째 메소드 및 다른 모든 메소드를 첫 번째 메소드로 맵핑 / 지원하지만 대신 첫 번째 메소드로 맵핑 / 지원한다는 것입니다.
명시 적 RequestMapping이 같은 위치에있는 PathVariable과 함께 RequestMapping을 오버라이드하도록 Spring에 지시 할 수 있습니까?
편집 2 : / support 매핑이 / {section} 매핑 전에 왔을 때 작동하는 것으로 보입니다. 불행하게도 우리는 수십 개의 컨트롤러에 RequestMapping으로 수많은 메소드를 포함하고 있습니다. / {section} 매핑을 가진 컨트롤러가 마지막으로 초기화되었는지 어떻게 확인할 수 있습니까? 아니면 사전 요격기가 갈 길입니까?
편집 1 : 이것은 단순화 된 것으로, 두 개의 RequestMapping만으로는 의미가 없습니다.
해결법
-
==============================
1.Spring을 사용하면 시나리오를 지원하기 위해 org.springframework.web.HttpRequestHandler를 확장 할 수 있습니다.
Spring을 사용하면 시나리오를 지원하기 위해 org.springframework.web.HttpRequestHandler를 확장 할 수 있습니다.
메소드 구현 :
@Override public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
이를 사용하여 들어오는 요청을 분석하고 요청 URL이 요청 URL의 특수 하위 집합에 속하는지 그리고 적절한 위치로 전달되는지 확인하십시오.
전의:
@Override public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** You will want to check your array of values and have this data cached **/ if (urlPath.contains("/sectionName")) { RequestDispatcher requestDispatcher = request.getRequestDispatcher("sections" + "/" + urlPath); requestDispatcher.forward(request, response); } }
다음과 같은 섹션을 설정하십시오.
@RequestMapping(value={"/sections/{sectionName}"})
이렇게하면 기존 컨트롤러 매핑을 방해하지 않습니다.
-
==============================
2.2이 방법이 2 개의 다른 컨트롤러에 정의되어있는 경우 문제는 두 컨트롤러가 동일한 URL에 매핑되어 있다는 것입니다. 컨트롤러 초기화 순서를 지금 제어하지 않으므로 순서는 임의적입니다.
2이 방법이 2 개의 다른 컨트롤러에 정의되어있는 경우 문제는 두 컨트롤러가 동일한 URL에 매핑되어 있다는 것입니다. 컨트롤러 초기화 순서를 지금 제어하지 않으므로 순서는 임의적입니다.
나는 / {section} 전에 초기화 될 지원 매핑이 필요하다고 생각합니다.
이를 달성하기 위해서는 컨트롤러 "섹션"을 컨트롤러 "지원"에 따라 정의하십시오. 이 방법으로 하나의 컨트롤러에 두 메서드를 함께 넣고 "section"앞에 "support"에 매핑 된 메서드를 넣으려는 시도가 도움이되지 않는다면
나는 여기에 다른 제안이 작동하지 않습니다. "섹션"은 무엇입니까? 제한된 수의 값을 수용 할 수 있으면 enum으로 정의해야합니다. 이 경우 지원 및 섹션 메서드가 하나의 컨트롤러 또는 별도의 컨트롤러에있는 경우 모든 것이 필요한대로 작동합니다.
행운을 빕니다.
-
==============================
3.이것은 문제가되지 않는 것 같습니다. 이것은 유효한 매핑입니다. http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-uri-templates를 확인하십시오.
이것은 문제가되지 않는 것 같습니다. 이것은 유효한 매핑입니다. http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-uri-templates를 확인하십시오.
16.3.2 절에서 @RequestMapping으로 요청 매핑은 당신이 시도하는 것과 똑같이하는 두 개의 메소드가 존재합니다.
클래스가 컴파일되고 있는지 확인하려면 클래스 수준에서 @RequestMapping ( "/ someprefix")을 추가하여 원하는대로 URL이 노출되어 있는지 확인하십시오.
버전 3.1.0.RELEASE를 사용하여 로컬로 예제를 확인하고 아무런 문제도 없었습니다.
해결 방법으로 (잘 이해할 수있는 REST URI를 제공하려면 두 번째 매핑에 몇 가지 컨텍스트를 추가하십시오.
@RequestMapping(value={"client/support"}) // i.e: if you are working with clients public ModelAndView getsupport(@PathVariable Long supportId){ // do your code here something here }
물론 이것이 시스템에있는 고유 한 컨트롤러 인 경우 유효합니다. 그렇지 않으면 위에서 제안한대로 클래스 수준에서 RequestMapping을 사용해야합니다.
이게 도움이 되길 바란다.
-
==============================
4.Spring 3.1.2에서이 동작을 보지 못하고 있습니다. 이전 버전의 Spring과 관련된 버그 일 수 있습니다. 다음은 나에게 아무런 문제없이 실행되는 요지입니다 - https://gist.github.com/3802254
Spring 3.1.2에서이 동작을 보지 못하고 있습니다. 이전 버전의 Spring과 관련된 버그 일 수 있습니다. 다음은 나에게 아무런 문제없이 실행되는 요지입니다 - https://gist.github.com/3802254
from https://stackoverflow.com/questions/12647346/how-to-define-requestmapping-prioritization by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링이 체크되지 않은 예외 만 처리하는 이유 (0) | 2019.03.23 |
---|---|
[SPRING] 동적으로 봄 콩을 바꾼다. (0) | 2019.03.22 |
[SPRING] Gmail에 첨부 파일로 표시되는 이메일에 포함 된 이미지를 중지하는 방법? (0) | 2019.03.22 |
[SPRING] Spring Data REST를 사용하여 다양한 REST API에 대한 다중 디스패처 서블릿이있는 JAR (Spring Boot) (0) | 2019.03.22 |
[SPRING] 스프링 JPA 저장소 : 저장시 업데이트 방지 (0) | 2019.03.22 |