2011-03-20 2 views
6

현재 웹 서비스에서 스프링 서비스를 적용하고 있습니다.url 패턴이 경로 일 때 스프링 MVC 디스패처가 제대로 작동하지 않습니다.

에 매핑은 스프링 MVC 디스패처 '이름의 DispatcherServlet의 URI [/ MyApp를/휴식/testSvc/메시지]와 HTTP 요청을 찾을 수 없습니다 :이 설정 될 때 우리는 우리가 얻을 그러나, 우리의 나머지 서비스는 ${contextPath}/rest/** 아래에 표시 할 서블릿 '

web.xml 있습니다 괜찮

<servlet> 
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/spring/servlet-context.xml 
    </param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
    <url-pattern>/rest</url-pattern> 
</servlet-mapping> 

servlet-context.xml을, 그들은 시작시 등록 얻을로 서비스를 등록한다. 다음과 같이

<context:component-scan base-package="com.mycompany.myapp.rest" /> 
<mvc:annotation-driven /> 

내 컨트롤러 같습니다

@Controller 
@RequestMapping(value = "/rest/testService") 
public class TestREST { 
    @RequestMapping(value="message", method=RequestMethod.GET) 
    public @ResponseBody String getMessage() { 
     return "REST working"; 
    } 

을 내가 web.xmlurl-pattern을 cahnge 경우에 * .rest하고 작동 messagemessage.rest에 대한 내 요청 매핑.

+0

'/ rest *'을 사용해 보셨습니까? –

+0

나는 그와 비슷한 것일 수도 있다고 생각했지만, 불행히도 그 경우는 아니지만, 서블릿은 실제로 요청이 들어있는 이유가 무엇인지를 기록하고있다. 그러나 정확하게 일치하지는 않는다. –

답변

25

web.xml@RequestMapping 모두에 /rest이라는 접두사가 반복되는 것이 문제 일 수 있습니다. 둘 중 하나에 있어야합니다.

<url-pattern>/rest</url-pattern> 

@RequestMapping(value = "/testService") 

@RequestMapping가 작동하는에 경로는 서블릿 부분을 다음과 경로의 일부이며, 당신의 web.xml 그래서 무엇에 대한 @RequestMapping 경기가 남아, /path로 서블릿 부분을 정의 즉 /testService입니다.

현재 양식에서 @RequestMapping은 실제로 {contextPath}/rest/rest/testService과 일치합니다.

+3

건배 메이트, 나는 이것을 시도했으나 작동하지 못했습니다. 문제는 왜 '/rest'이 (가)'/ rest/*'로 바뀌었고 지금은 정상적으로 작동하고 있습니다. 그래서 두 사람의 결합은 저를 망쳤습니다. 고마워. –

+0

거기에 문서화에 관한 정보가 있습니까? – dhblah

7

아마 <url-pattern>/rest/*</url-pattern> 또는 <url-pattern>/rest*</url-pattern>으로 변경하여 도움이되는지 확인해보십시오.

+0

불행히도 그것은 작동하지 않습니다. 나는 그것이 오류를 로깅하고있는 것처럼 배낭이 요청을 받고 있다고 말할 수 있습니다. 요청을받지 못했다면 로그에 기록되지 않을 것이라고 생각하십니까?/rest *는 서블릿을 통과하지 못한다. –

+1

'/ rest/*'가 skaffman의 답과 함께 요구된다는 것을 알았습니다. 나는 이것을 고맙다고 생각했습니다. –

관련 문제