RESTeasy的Spring Integration中的HTTP状态500而不是405

时间:2014-07-31 12:34:54

标签: java spring exception resteasy http-status-codes

我使用RESTEasy 3.0.1和Spring 3.1.4实现了REST服务。

我的最小REST资源如下所示:

@Path ("test")
public class TestResource {

    @GET
    @Path ("hello")
    @Produces("text/plain")
    public String hello() {
        return "hello world";
    }
}

使用Spring的 DispatcherServlet 设置应用程序。这是我的 web.xml

<web-app ...>
    <servlet>
        <servlet-name>resteasyApp</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>resteasyApp</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

Spring和RESTeasy使用RESTEasy的 Spring Integration (resteasy-spring)捆绑在一起。在RESTEasy的文档中有一个chapter。我正在使用段落 45.2 中描述的方法。

Spring配置文件包含:

<beans ...>
    <context:annotation-config/>

    <import resource="classpath:springmvc-resteasy.xml"/>

    <bean class="rest.TestResource"/>
</beans>

该应用程序适用于此设置。在资源 / test / hello 上执行 GET 请求时,我得到包含 String “hello world”的预期响应,状态代码为200 。 DELETE 请求应返回状态405(方法不允许),因为我的资源不支持 DELETE 。但是,我收到以下回复:

HTTP/1.1 500 No resource method found for DELETE, return 405 with Allow header
Content-Length: 0
Server: Jetty(6.1.26RC0)

状态代码为500(内部服务器错误),通常由RESTEasy发送各种意外异常。我可以确认内部RESTEasy会抛出 NotAllowedException ,然后导致状态为500的响应。

我认为,我的问题来自弹簧配置(如下所示)。我还试图通过RESTEasy的 FilterDispatcher as described in the documentation在没有Spring的情况下设置我的应用程序。在这种情况下, DELETE 请求还会触发 NotAllowedException 。但这一次它被正确映射到405响应。如何在Spring应用程序中获得此行为?

0 个答案:

没有答案