GAE不尊重泽西岛的WebApplicationException

时间:2014-05-25 13:29:52

标签: java google-app-engine jersey

public class NotAuthorizedException extends WebApplicationException {
    public NotAuthorizedException(String message) {
           super(Response.status(Response.Status.BAD_REQUEST).entity(message).type(MediaType.TEXT_PLAIN).build());
    }
}

我的资源:

public class MyResource{
@GET
public Book getBook(){
   ...
   throw new NotAuthorizedException("my exception");
}
}

在GAE开发服务器中,我的客户端收到my exception,这是我所期望的,但在生产模式下,它返回:

<html><head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>400 Bad Request</title>
</head>
<body text=#000000 bgcolor=#ffffff>
<h1>Error: Bad Request</h1>
</body></html>

这似乎是GAE默认的400错误响应。

提前致谢。

2 个答案:

答案 0 :(得分:4)

我遇到了类似的问题。将“ jersey.config.server.response.setStatusOverSendError ”设置为true可以解决您的问题。有关详细信息,请参阅https://stackoverflow.com/a/25894138/1174054

答案 1 :(得分:0)

@Takahiko Kawasaki已经回答了这个问题,但是下面的完整性是设置提到的Jersey属性的两种替代方法:

编程:

new ResourceConfig()
       .property(ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR, true);

或者在web.xml中:

<servlet>
  <servlet-name>API</servlet-name>
  <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
  ....
  <init-param>
    <param-name>jersey.config.server.response.setStatusOverSendError</param-name>
    <param-value>true</param-value>
  </init-param>
</servlet>