我使用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;
}
将以下服务器属性设置为true可以解决此问题。
jersey.config.server.response.setStatusOverSendError
为了完整起见,下面是设置提到的泽西属性的两种替代方法:
以编程方式:
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>
我有一个运行spring-boot、jersey2和spring度量的应用程序:下面是maven片段: 在引入致动器依赖性之前,Jersey一直工作得很好。然后创建了以下bean以使Jersey作为过滤器工作: 度量被映射到/admin路径。使用这种配置,我无法使度量标准工作。但是,通过添加management.port(不同于主应用程序端口),既可以使用Jersey资源,也可以使用metrics
我有一个服务器Weblogic 12.1.3,带有JAX-RS 2。x作为共享库安装(参见。https://docs.oracle.com/middleware/1213/wls/RESTF/use-jersey20-ri.htm#RESTF297). 该共享库包括例如javax。ws。rs-api-2.0。jar和jersey-media-multipart-2.5.1。jar。 请注意,我不确
我需要在java上开发简单的web服务。我是java技术新手,根据几篇文章,我决定将JAX-RS(Jersey)与嵌入式http服务器(Grizzly2)结合使用,因为它看起来适合构建REST服务,部署似乎很简单。 在我的开发环境中,所有工作都很完美(使用IntllijIdea)。 但当我尝试在测试服务器上部署时,每个请求都返回“500内部错误”(偶数/application.wadl) 简单资源
如spring boot博客所述 我尝试自定义我的对象序列化。 在我的配置中添加了一个新的配置bean之后 当我尝试输出类用户的实例时,json结果不在CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES中 也许我需要在我的Jersey配置中注册一些东西来激活我的自定义obejctMapper配置 谢谢
我想在Grizzly 2上运行JAX-RS 2.0/jer,但我现在不知道如何设置它。我发现了以下Maven依赖项: 我需要什么Java代码才能在灰熊上运行泽西岛?
问题内容: 我想创建一个类,该类的对象可以使用注释(或者在需要将参数传递给注释的情况下使用自定义注释)注入资源方法中。在泽西岛1. *中,我会使用(在我的情况下,与一起使用)。我想要实现的是来自 dropwizard的 [ 1 ] (使用Jersey 1.7)。 __ 据我所知,Jersey的注入功能已被HK2取代,我找不到我所描述的任何示例。 问题答案: 您需要从HK2 实现InjectionR