gpt4 book ai didi

java - Jersey 2异常处理

转载 作者:行者123 更新时间:2023-12-01 18:27:49 26 4
gpt4 key购买 nike

我正在使用 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","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}

请帮我找出解决此问题的方法。

异常映射器在错误对象中填充错误消息和状态。这是异常映射器代码:

public Response toResponse(ServiceException exception) {
List<MyResponseError> myErrors= exception.getMyErrors();
ErrorsDTO errors = new ErrorsDTO(ERROR_STATUS,myErrors);
return errors.generateResponse();
}

这是错误对象的代码:

public Response generateResponse() {
if(this.errorStatus==null){
this.errorStatus= Status.NOT_FOUND;
}
this.errorCode= this.errorStatus.getStatusCode();
//TODO response status should be set to this.errroStatus.
//Jersey does not allow JSON response with status code other than 200
ResponseBuilder builder = Response.status(Status.OK);
builder.entity(this);
builder.type(MediaType.APPLICATION_JSON);
Response response = builder.build();
return response;
}

最佳答案

为了完整起见,下面是设置提到的 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>

关于java - Jersey 2异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25420697/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com