私はRESTフルサービス(Tomcatが主催)を公開しようとしており、Spring 3(M3)に必要な設定は何か分からない。Spring 3(m3)上に構築されたREST完全アノテーション付きサービスの最小構成は何ですか?
これは、サービスがどのように見えるか(例)です:
<beans ...>
<context:annotation-config />
<bean class="...AutowiredAnnotationBeanPostProcessor"/>
<bean class="...DefaultAnnotationHandlerMapping">
<context:component-scan base-package="com.mycompany.myserver"/>
</beans>
この:
@Controller
@Scope("prototype")
public class UsersController
{
@RequestMapping(value="https://stackoverflow.com/users/hello", method=RequestMethod.GET)
public String hello()
{
return "hello, user!";
}
}
私は、この(私は単純化のための完全なクラス名を省略)のように見えてきたSpring構成をSpringの設定をweb.xmlにどのように組み込んだのですか。
<listener>
<listener-class>...RequestContextListener</listener-class>
</listener>
<!-- Servlets -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>...DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:*:dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
私は最小限の設定(追加のservlet-config.xmlファイルなし)を作成します。このため、ディスパッチャを組み込みの構成に設定しています。
これは間違いありませんか?
私はTomcatを起動し、すべてのBeanは、私は、次のURLに移動していますロードされた後:「!こんにちは、利用者」ではなく、
http://localhost:8080/myserver/services/users/hello
そして、あなたが気づくと私の現在の設定が新しい要求として、この要求を再ルーティングしようとしている、
09:54:45,140 DEBUG RequestContextListener:69 - Bound request context to thread: [email protected]
09:54:45,140 DEBUG DispatcherServlet:834 - DispatcherServlet with name 'dispatcher' determining Last-Modified value for [/myserver/services/users/hello]
09:54:45,156 DEBUG DefaultAnnotationHandlerMapping:178 - Mapping [/users/hello] to handler '[email protected]'
09:54:45,171 DEBUG DispatcherServlet:850 - Last-Modified value for [/myserver/services/users/hello] is: -1
09:54:45,171 DEBUG DispatcherServlet:683 - DispatcherServlet with name 'dispatcher' processing GET request for [/myserver/services/users/hello]
09:54:45,218 DEBUG HandlerMethodInvoker:148 - Invoking request handler method: public java.lang.String com.symantec.repserver.myserver.UsersController.hello()
09:54:45,218 DEBUG DefaultListableBeanFactory:1366 - Invoking afterPropertiesSet() on bean with name 'hello, user!'
09:54:45,218 DEBUG DispatcherServlet:1060 - Rendering view [org.springframework.web.servlet.view.InternalResourceView: name 'hello, user!'; URL [hello, user!]] in DispatcherServlet with name 'dispatcher'
09:54:45,234 DEBUG InternalResourceView:237 - Forwarding to resource [hello, user!] in InternalResourceView 'hello, user!'
09:54:45,250 DEBUG DispatcherServlet:834 - DispatcherServlet with name 'dispatcher' determining Last-Modified value for [/myserver/services/users/hello, user!]
09:54:45,250 DEBUG DispatcherServlet:842 - No handler found in getLastModified
09:54:45,250 DEBUG DispatcherServlet:683 - DispatcherServlet with name 'dispatcher' processing GET request for [/myserver/services/users/hello, user!]
09:54:45,250 WARN PageNotFound:959 - No mapping found for HTTP request with URI [/myserver/services/users/hello, user!] in DispatcherServlet with name 'dispatcher'
09:54:45,250 DEBUG DispatcherServlet:643 - Successfully completed request
09:54:45,250 DEBUG DispatcherServlet:643 - Successfully completed request
09:54:45,250 DEBUG RequestContextListener:89 - Cleared thread-bound request context: [email protected]
:
/myserver/services/users/hello, user!
任意のアイデア回答は、私の失望に、私は、ログファイルに次のエラーを参照してくださいなにが問題ですか?私は何が欠けていますか?
うーん...しかし、それはメソッドの戻り値は、要求者に送信されることを主張し、全体JAX-RSのアイデアを、破壊されます。 上記の要件が成り立つように、メソッドにアノテーションを付ける方法はありますか? – IgorM
javadocによると、あなたのメソッドは、あなたが書くためにServletOutputStream/WriterでRequestMapperが渡すOutputStreamまたはWriterの引数を受け取ります。私はこれが本当にこれについて最善の方法であるかどうかは分かりませんが、うまくいくでしょう。 @RequestMapping(value = "/ users/hello"、method = RequestMethod.GET) 公開空のhello(作者w) { w.write( "hello、user!"); w.flush(); リターン; } あなたは、ちょうど作家ではなく、あなたが適切なHTTPヘッダーを設定することができ、そのように全体のHttpServletResponseを取得することができます。 – Gandalf
上記のようにストリームに直接レスポンスを書き込むことも、それを行うModelAndViewオブジェクトを返すこともできます。その効果はほとんど同じです。 春3は、メソッドの戻り値を処理するための新しいHttpMessageConverterパターンを使用しますが、ssdly彼らだけ@RequestBodyに適用する場合、それはいいだろう。彼らは春REST MVCは、彼らが作った明示的なチョイスだったこと、準拠したJAX-RS * *でないことを覚えておいてください春2.5 であったようにメソッドの戻り値は、まだ解釈されます。 JAX-RSはSpring MVCにうまく適合しませんでした。 – skaffman