我在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
来回复此回复
答案 0 :(得分:2)
是的,你可以。这是概述Jersey属性的页面,需要将其更改为禁用WAS,以解决您的错误:
https://java.net/jira/browse/JERSEY-2521
简而言之,您必须在配置Jersey时将属性org.glassfish.jersey.server.ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR
设置为true
。