맵핑 URI 못찾는 문제 여쭈어 봅니다.
- 작성자 :
- 정*창
- 작성일 :
- 2015-01-28 01:11:44
- 조회수 :
- 1,920
- 구분 :
- 개발환경
- 진행상태 :
- 완료
Q
안녕하세요.
주소를 호출했는데 계속 에러가 아래와 같이 발생하여 문의드립니다.
WARN [org.springframework.web.servlet.PageNotFound] No mapping found for HTTP request with URI [/api/asdf] in DispatcherServlet with name 'action'
web.xml 아래와 같습니다.
--------------------------------------------------------------
....
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.json</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.xml</url-pattern>
</servlet-mapping>
....
dispatcher-servlet.xml 아래와 같습니다.
--------------------------------------------------------------
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="interceptors">
<list>
<ref bean="localeChangeInterceptor" />
</list>
</property>
</bean>
Controller 아래와 같습니다.
--------------------------------------------------------------
package egovframework.example.sample.web;
....
@RequestMapping(value="/api/{name}",method = RequestMethod.GET)
public String getAllTasks(@PathVariable String name) {
String result="Hello "+name;
return result;
}
context-common.xml 아래와 같습니다.
--------------------------------------------------------------
<context:component-scan base-package="egovframework">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
log
--------------------------------------------------------------
....
INFO [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping] Mapped "{[/api/{name}],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String egovframework.example.sample.web.TestController.getAllTasks(java.lang.String)
....
정상적으로 component-scan base-package 설정도 잘 되어있는것 같고 로그와 같이 잘 읽어 드린것 같습니다.
그런데 이상하게
호출하면 못찾네요..
참고로 context root path 는 / 입니다.
한번 봐주시길 바랍니다.
감사합니다.
주소를 호출했는데 계속 에러가 아래와 같이 발생하여 문의드립니다.
WARN [org.springframework.web.servlet.PageNotFound] No mapping found for HTTP request with URI [/api/asdf] in DispatcherServlet with name 'action'
web.xml 아래와 같습니다.
--------------------------------------------------------------
....
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.json</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.xml</url-pattern>
</servlet-mapping>
....
dispatcher-servlet.xml 아래와 같습니다.
--------------------------------------------------------------
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="interceptors">
<list>
<ref bean="localeChangeInterceptor" />
</list>
</property>
</bean>
Controller 아래와 같습니다.
--------------------------------------------------------------
package egovframework.example.sample.web;
....
@RequestMapping(value="/api/{name}",method = RequestMethod.GET)
public String getAllTasks(@PathVariable String name) {
String result="Hello "+name;
return result;
}
context-common.xml 아래와 같습니다.
--------------------------------------------------------------
<context:component-scan base-package="egovframework">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
log
--------------------------------------------------------------
....
INFO [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping] Mapped "{[/api/{name}],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String egovframework.example.sample.web.TestController.getAllTasks(java.lang.String)
....
정상적으로 component-scan base-package 설정도 잘 되어있는것 같고 로그와 같이 잘 읽어 드린것 같습니다.
그런데 이상하게
호출하면 못찾네요..
참고로 context root path 는 / 입니다.
한번 봐주시길 바랍니다.
감사합니다.
A
안녕하세요. 정영창님.
servlet-mapping의 url-pattern상에 "/api"와 같은 디렉토리가 지정된 경우 해당 부분이 제외되어 mapping됩니다.
즉, /api/asdf 가 아닌 /asdf로 호출하셔야 합니다.
다만, 질문 처럼 path variable을 사용하신 경우 다른 mapping가 혼선될 수 있기 때문에
@RequestMapping 지정 상 경로를 하나 더 추가 하신 후에 사용하시면 도움이 되실 것 같습니다.
e.g. "/api/hello/asdf" 호출 -> @RequestMapping에는 "/hello/{name}" 지정
참고로 alwaysUseFullPath 설정을 true로 지정하실 수 있지만, 이 경우 contextRoot까지 포함되기 때문에 추가적으로 다른 문제가 발생될 수 있습니다. (DefaultAnnotationHandlerMapping 또는 RequestMappingHandlerMapping 속성)
그럼, 즐거운 하루되십시오.
감사합니다.
servlet-mapping의 url-pattern상에 "/api"와 같은 디렉토리가 지정된 경우 해당 부분이 제외되어 mapping됩니다.
즉, /api/asdf 가 아닌 /asdf로 호출하셔야 합니다.
다만, 질문 처럼 path variable을 사용하신 경우 다른 mapping가 혼선될 수 있기 때문에
@RequestMapping 지정 상 경로를 하나 더 추가 하신 후에 사용하시면 도움이 되실 것 같습니다.
e.g. "/api/hello/asdf" 호출 -> @RequestMapping에는 "/hello/{name}" 지정
참고로 alwaysUseFullPath 설정을 true로 지정하실 수 있지만, 이 경우 contextRoot까지 포함되기 때문에 추가적으로 다른 문제가 발생될 수 있습니다. (DefaultAnnotationHandlerMapping 또는 RequestMappingHandlerMapping 속성)
그럼, 즐거운 하루되십시오.
감사합니다.