URLパターンがパスである場合、スプリングMVCディスパッチャーを適切に動作させることができません

StackOverflow https://stackoverflow.com/questions/5367309

質問

現在、レストサービス用にSpring MVCを適用しているWebアプリがあります。私たちは、私たちのレストサービスを下に掲載したいと考えています ${contextPath}/rest/**, 、しかし、私がこれを設定すると、私たちは取得します:

uri [/myapp/ret/testsvc/message]を使用したHTTP要求のマッピングはありません。

じぶんの 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";
    }

私がcahngeする場合 url-patternweb.xml *.restと私のリクエストマッピングへ messagemessage.rest できます。

役に立ちましたか?

解決

問題は、あなたが繰り返した可能性が高いことです /rest 両方のプレフィックス web.xml@RequestMapping. 。それは1つまたはどちらかにあるべきですが、両方ではありません。

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

@RequestMapping(value = "/testService")

その道 @RequestMapping 操作は、サーブレット部分に続くパスの部分であり、あなたの web.xml サーブレット部分を次のように定義します /path, 、 それで @RequestMapping 残っているものと一致する、すなわち /testService.

その現在の形で、あなた @RequestMapping 実際に一致しています {contextPath}/rest/rest/testService.

他のヒント

たぶん、あなたはに変えてみることができます <url-pattern>/rest/*</url-pattern>または <url-pattern>/rest*</url-pattern>それが役立つかどうかを確認します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top