【问题标题】:Google App Engine Jersey error format jsonGoogle App Engine Jersey 错误格式 json
【发布时间】:2016-06-07 15:56:03
【问题描述】:

我正在使用带有 Jersey 和 JAX-RS 的 Google App Engine JAVA 开发 REST API。 我希望能够以 JSON 格式向用户发送自定义错误,因为我正在使用 javax.ws.rs.ext.ExceptionMapper

当我在本地机器上使用 Jetty 运行应用程序时一切正常,但是当我部署到 Google 时,我得到了默认的 HTML 404 页面

这里是资源代码:

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("{id}")
public Customer getCustomer(@PathParam("id") String id) {
    Customer customer = getCustomer(id);
    if(customer == null)
        throw new NotFoundException("Customer not found");
    return customer;
}

异常映射器:

@Provider
public class NotFoundExceptionMapper implements ExceptionMapper<NotFoundException> {

@Override
public Response toResponse(NotFoundException e) {
    ErrorMessage errorMessage = new ErrorMessage();
    errorMessage.setErrrorMessage(e.getMessage());
    errorMessage.setResponseCode(404);
    return Response.status(Response.Status.NOT_FOUND).entity(errorMessage).type(MediaType.APPLICATION_JSON_TYPE).build();
}    
}

我希望得到 JSON 格式的 ErrorMessage 对象作为响应,但我得到的只是默认的 HTML 404 页面。

【问题讨论】:

标签: java google-app-engine exception jersey jax-rs


【解决方案1】:

您可以将 Jersey 属性 ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR 设置为 true

当响应状态为 4xx 或 5xx 时,可以在容器特定的 Response 实现中选择 sendErrorsetStatus。例如。在 servlet 容器上 Jersey 可以调用 HttpServletResponse.setStatus(...)HttpServletResponse.sendError(...)

调用sendError(...)方法通常会重置实体、响应头并为指定的状态码提供错误页面(例如servlet错误页面配置)。但是,如果您想对响应进行后处理(例如通过 servlet 过滤器),唯一的方法是在容器响应对象上调用 setStatus(...)

如果属性值为 true,则使用方法 Response.setStatus(...) 而不是默认的 Response.sendError(...)

属性值的类型是布尔值。 默认值为 false

配置属性的名称是"jersey.config.server.response.setStatusOverSendError"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 2010-09-16
    • 1970-01-01
    相关资源
    最近更新 更多