1

我面临以下问题:

我将 CXF 用于 REST 服务。对于我正在使用的异常处理javax.ws.rs.ext.ExceptionMapperpublic Response toResponse(T ex)我想返回一些对象,例如

class MyObject {
    String detail;
}

方法的示例实现类似于

public Response toResponse(T ex) {
    MyObject o = new MyObject();
    o.detail = "...";
    return Response.status(400).entity(o).build();
}

但我有问题

org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor writeResponseErrorMessage
WARNING: No message body writer has been found for response class RequestError.

不知何故,我发现当我指定 MediaType

return Response.status(400).entity(o).type("application/json").build();

一切正常,但我不知道客户端接受哪种类型...

当然,我可以在某个地方存储客户端接受的类型,然后使用正确的类型,但这有异味。我想用更好的东西。

例如,在我的 CXF 端点中,我可以使用 指定@Produces我的控制器方法生成的 MediaType 类型,然后 CXF/Spring 选择正确的。我也在我的 ExceptionMapper 中尝试过,但它不起作用。

4

1 回答 1

0

你可以这样做

@Context HttpHeaders headers;

public Response toResponse(Exception e) {
    ExceptionEntity ee = new ExceptionEntity(e);
    ResponseBuilder rb = Response.status(Response.Status.INTERNAL_SERVER_ERROR);
    rb.type(headers.getMediaType());
    rb.entity(ee);
    Response r = rb.build();
    return r;
}

我正在使用 cxf-rs 2.7.5

于 2013-07-15T09:36:14.510 回答