1

以前,当我在 Grizzly 上使用 Jersey 时,如果我调用了 Jersey 注释中未定义的 HTTP 方法,它将返回 405 Method Not Allowed 响应,这很好。

现在我在 Tomcat 上运行 Jersey,服务器返回 Tomcat 的特定 405 html 页面。我怎样才能恢复到简单地发送带有空正文的响应?

4

3 回答 3

1

取自该线程:http: //jersey.576304.n2.nabble.com/how-to-catch-405-errors-td4937392.html

像这样创建一个异常映射器类:

@Provider
public class MyMapper implements  
ExceptionMapper<WebApplicationException> {
   public Response toResponse(WebApplicationException e) {
     Response r = e.getResponse();
     if (r.getStatus() == 405) {
       return Response.fromResponse(r).entity(...).build();
     }
     return r;
   }
} 

这使我能够捕获 405 请求并返回一个可以由应用程序解析的更有用的错误资源。

于 2015-07-25T17:24:44.133 回答
0

您可以在 webapp 的 web.xml 中配置自定义页面:

<error-page>
    <error-code>405</error-code>
    <location>/empty.txt</location>
</error-page>

位置可以引用一个空的文本文件或 JSP/Servlet/任何适合您的需要。

于 2012-02-24T23:52:12.767 回答
0

我的自定义异常我在响应中返回了一个错误对象(PO​​JO)......而我的 servlet 服务器不知道如何将错误转换为 JSON。

我通过添加以下 Maven 依赖项解决了这个问题

 <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-moxy</artifactId>
        <version>2.27</version>
 </dependency>

我的回应是这样的:

@Override
public Response toResponse(WebApplicationException e) {
    Response r = e.getResponse();
    if (r.getStatus() == 405) {
        Error error = new Error(Response.Status.BAD_REQUEST.toString(), e.getMessage());
        return Response.fromResponse(r).status(Response.Status.BAD_REQUEST).header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
                .entity(error)
                .build();
    }
    return r;
}}

实际上,成功的部分是:

header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
于 2019-01-28T20:54:11.330 回答