[SPRING] DefaultAnnotationHandlerMapping의 작동 방식
SPRINGDefaultAnnotationHandlerMapping의 작동 방식
DefaultAnnotationHandlerMapping 작동 방식에 대해 혼란스러워합니다.
내 web.xml에 내가 가지고있는
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/somePath/someWork</url-pattern>
<url-pattern>/users</url-pattern>
<url-pattern>/user/*</url-pattern>
</servlet-mapping>
나는 이런 컨트롤러를 가지고있다.
@RequestMapping(value="/user/adduser", method={RequestMethod.POST})
public void addAdmin(@ModelAttribute("myData") myData data) {
System.out.println("We reached adduser controller");
}
그리고 jsp 파일에 내가 가지고있다.
<form:form id="adduser" method="post" action="/user/adduser" commandName="myData">
이것은 작동하지 않습니다. "/ adduser"와 404 페이지의 "/ user / adduser"에 대한 처리기 매핑이 없습니다.
하지만 .xml 파일에서 언급하면
<url-pattern>/user/adduser</url-pattern>
그것은 작동하거나 내가 컨트롤러를 좋아한다면,
@RequestMapping(value="/adduser", method={RequestMethod.POST})
또한 작동합니다. 페이지를 제출할 때 올바른 컨트롤러에 도달합니다.
@ReuqestMapping이 작동하는 방식에 혼란을 겪고 있습니다. 요청이 "/ user / adduser"와 같이 나타나면 올바른 클래스와 올바른 방법을 찾기 시작할 것입니다.
해결법
-
==============================
1.Spring은 HttpServletRequest의 pathInfo 속성과 일치합니다.
Spring은 HttpServletRequest의 pathInfo 속성과 일치합니다.
web.xml이
/ user / * url-pattern>을 지정하면 pathInfo는 / user 접두어가 제거 된 경로가되므로 @RequestMapping은 / adduser 여야합니다. web.xml이
/ user / adduser url-pattern>을 지정하면 pathInfo는 전체 / user / adduser 경로가되므로 @RequestMapping이 전체 경로와 일치해야합니다. 이것은 Spring에 의해 수행되는 것이 아니라 서블릿 컨테이너에 의해 수행되며 때때로 혼란 스러울 수 있습니다.
@RequestMapping에서 와일드 카드를 사용하여이 문제를 완화 할 수 있습니다 (예 :
@RequestMapping(value="**/adduser", method={RequestMethod.POST})
from https://stackoverflow.com/questions/5740958/how-defaultannotationhandlermapping-works by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] jUnit 테스트에서 Spring @Service 객체에 액세스하는 방법 (0) | 2019.07.16 |
---|---|
[SPRING] 하나의 트랜잭션에서 Hibernate와 JDBC (0) | 2019.07.16 |
[SPRING] junit 테스트를 사용하여 Spring Boot 애플리케이션에 명령 줄 인수 전달하기 (0) | 2019.07.16 |
[SPRING] 스프링 데이터 휴식 - 지원되는 작업을 제한하는 방법이 있습니까? (0) | 2019.07.16 |
[SPRING] 하나의 속성에 대해 여러 줄을 사용하는 자바 속성 파일 (0) | 2019.07.16 |