Java 泽西岛2例外处理
我使用Jersey 2.10异常映射器类来处理异常。我想返回错误状态和错误信息的JSON正文。我想得到类似的回应:Java 泽西岛2例外处理,java,web-services,rest,jersey-2.0,Java,Web Services,Rest,Jersey 2.0,我使用Jersey 2.10异常映射器类来处理异常。我想返回错误状态和错误信息的JSON正文。我想得到类似的回应: 400 Bad Request X-Powered-By: Servlet/3.0 Content-Length: 152 Content-Type: application/json Content-Language: en-AU Date: Thu, 21 Aug 2014 07:21:40 GMT {"errors":[{"code":"LKVBS182","ty
400 Bad Request
X-Powered-By: Servlet/3.0
Content-Length: 152
Content-Type: application/json
Content-Language: en-AU
Date: Thu, 21 Aug 2014 07:21:40 GMT
{"errors":[{"code":"LKVBS182","type":"ERROR","message":"COUNTRY NAME IS NOT DEFINED IN DATA-BASE"}],"status":"ERROR","errorStatus":"Bad Request","errorCode":400}
Jersey没有在响应中发送JSON正文。我得到的是:
400 Bad Request
Content-Length: 161
Content-Type: text/html;charset=UTF-8
Connection: Close
Date: Thu, 21 Aug 2014 07:29:22 GMT
Error 400: Bad Request
如果我将状态代码更改为200,那么我将获得预期的响应正文
200 OK
X-Powered-By: Servlet/3.0
Content-Length: 152
Content-Type: application/json
Content-Language: en-AU
Date: Thu, 21 Aug 2014 07:21:40 GMT
{"errors":[{"code":"LKVBS182","type":"ERROR","message":"COUNTRY NAME IS NOT DEFINED IN DATA-BASE"}],"status":"ERROR","errorStatus":"Bad Request","errorCode":400}
请帮我找出这个问题的解决办法
jersey.config.server.response.setStatusOverSendError
异常映射程序在错误对象中填充错误消息和状态。以下是异常映射程序代码:
public Response toResponse(ServiceException exception) {
List<MyResponseError> myErrors= exception.getMyErrors();
ErrorsDTO errors = new ErrorsDTO(ERROR_STATUS,myErrors);
return errors.generateResponse();
}
将以下服务器属性设置为true可解决此问题
jersey.config.server.response.setStatusOverSendError
将以下服务器属性设置为true可解决此问题
jersey.config.server.response.setStatusOverSendError
为确保完整性,以下是设置所述Jersey属性的两种可选方法: 以编程方式:
new ResourceConfig()
.property(ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR, true);
或在web.xml中:
<servlet>
<servlet-name>jersey-serlvet</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>
为确保完整性,以下是设置所述Jersey属性的两种可选方法: 以编程方式:
new ResourceConfig()
.property(ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR, true);
或在web.xml中:
<servlet>
<servlet-name>jersey-serlvet</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>
你能分享你的例外标记代码吗?在帖子中添加例外标记代码对我来说很好。我有类似的代码,工作起来很有魅力。当JSON不正常时,您确定没有得到它吗?您能在Postman-REST客户端浏览器应用程序中试用吗?谢谢您的回复。当状态不是200时,响应不包括JSON。您正在使用哪种版本的球衣。请稍候。。。我不确定我看得是否清楚,但是否有建筑商;在generateResponse方法中?它是ExceptionMapper的成员方法吗?我使用的是Jersey 2.7,你能分享你的ExceptionMapper代码吗?在帖子中添加ExceptionMapper代码对我来说很好。我有类似的代码,工作起来很有魅力。当JSON不正常时,您确定没有得到它吗?您能在Postman-REST客户端浏览器应用程序中试用吗?谢谢您的回复。当状态不是200时,响应不包括JSON。您正在使用哪种版本的球衣。请稍候。。。我不确定我看得是否清楚,但是否有建筑商;在generateResponse方法中?它是ExceptionMapper的成员方法吗?我正在用运动衫2.7谢谢。我想补充一点,任何人都不应该在Jersey 2上使用Jersey 1的ClientResponse,因为它将忽略此属性响应\u SET\u STATUS\u OVER\u SEND\u错误。当直接返回客户端响应时,该属性也将被忽略,如下所示:@POST public response postData{return ClientBuilder.newClient.targetURI.path/.POST;}谢谢。我想补充一点,任何人都不应该在Jersey 2上使用Jersey 1的ClientResponse,因为它将忽略此属性响应\u SET\u STATUS\u OVER\u SEND\u错误。当直接返回客户端响应时,该属性也将被忽略,如下所示:@POST public response postData{return ClientBuilder.newClient.targetURI.path/.POST;}