如何禁用Websphere的8.5默认4xx消息?

时间:2015-04-21 13:01:44

标签: http-status-code-404 jersey-2.0 websphere-8

我在Websphere 8.5中有一个Jersey REST应用程序。每当我的资源响应4xx响应时,Webpshere(或IBM Http Server)会使用其默认错误消息覆盖响应正文,例如:

  

错误404:未找到

我不仅希望覆盖响应主体,我希望响应主体由我的资源生成,而且Websphere也不会更新Content-Length:响应头,从而在内容之间产生不一致 - 长度和实际反应体长。

当我的资源产生4xx响应时,是否有办法强制Websphere(或IBM HTTP服务器)覆盖响应正文?

例如,调用以下资源:

@Path("timeout")
public class TimeoutService {
    @GET
    @Path("withbody")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getWithBody() {
        Response.ResponseBuilder builder = Response.status(Response.Status.NOT_FOUND);

        builder.entity("{ \"status\" : \"notok\" }");
        return builder.build();
    }
}

将导致:

Error 404: No

Request Method:GET
Status Code:404 Not Found
Response Headers
$WSEP:
Connection:Keep-Alive
Content-Language:en-US
Content-Length:13
Content-Type:text/html;charset=ISO-8859-1
Date:Tue,21 Apr 2015 11:50:38 GMT>
Keep-Alive:timeout=15, max=100
X-Powered-By:Servlet/3.0

请注意由于内容长度不一致,默认邮件如何被截断。

但我想要的是通过将404{ "status" : "notok" }以及Content-Type设置为application/json来回复此回复

1 个答案:

答案 0 :(得分:2)

是的,你可以。这是概述Jersey属性的页面,需要将其更改为禁用WAS,以解决您的错误:

https://java.net/jira/browse/JERSEY-2521

简而言之,您必须在配置Jersey时将属性org.glassfish.jersey.server.ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR设置为true