Restlet的GET POST DELETE方法路由到同一个函数

时间:2015-08-14 02:47:49

标签: java spring tomcat restlet

这个问题很奇怪。详情如下。

我在项目中使用带有spring / tomcat的restlet来提供REST服务。但在某些情况下,所有HTTP方法(POST / DELETE / GET)请求都进入相同的函数,例如@Get例程,有时所有方法请求都进入@Post例程。每次重启tomcat时情况都不同。有时候所有方法都有效。

这是我的配置:

的web.xml

<servlet>
    <servlet-name>restlet</servlet-name>

    <servlet-class>org.restlet.ext.spring.SpringServerServlet</servlet-class>
    <init-param>
        <param-name>org.restlet.component</param-name>
        <param-value>component</param-value>
    </init-param>

</servlet>

的applicationContext.xml

<bean id="component" class="org.restlet.ext.spring.SpringComponent">
    <property name="defaultTarget" ref="restRouter" />
</bean>
<bean id="restRouter" class="org.restlet.ext.spring.SpringBeanRouter"></bean>
<bean name="/v1.0/{tenant}/templates/{id}" id="one" class="com.XXX.TemplateResource"/>

TemplateResource 扩展了ServerResource

@Get
@Override
public Representation get(){
    // some code
}

我认为配置还可以,有时候一切正常。 那么像eclipe或tomcat这样的东西有问题吗? 谢谢。

1 个答案:

答案 0 :(得分:3)

applicationContext.xml

<bean name="/v1.0/{tenant}/templates/{id}" id="one" class="com.XXX.TemplateResource"/>

对于SpringBeanRouterResources必须是范围原型,因为必须为每个请求创建一个新实例。

有关详细信息,请参阅SpringBeanRouter APIrestlet-spring-example