我正面临以下问题:
我正在使用CXF进行REST服务。对于异常处理我正在使用javax.ws.rs.ext.ExceptionMapper
而在public 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中尝试过它,但它不起作用。
答案 0 :(得分: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