0

我正在使用 Apache-cxf 来实现 Restful Web 服务。如果发生异常,我正在使用 ExceptionMapper 构建响应对象。如果发生任何异常,我会遇到错误。

“没有找到响应类 MyException 的消息正文编写器。”

我可以找到一些建议实现 MessageBodyWriter 的自定义 Writer 的帖子,但我不太清楚如果为构建响应传递的实体对象 (ErrorInfo) 是 jaxb 对象,为什么我需要自定义编写器。这可能是一个非常愚蠢的问题,但只是想了解。

@Provider
public class MyExceptionMapper implements
    ExceptionMapper<MyException> {

@Override
public Response toResponse(MyException ex) {
    Response.Status statusCode = exceptionMap.get(ex.getClass());
    ErrorInfo errorInfo=new ErrorInfo();
    errorInfo.setErrorCode(ex.getErrorCode());
    errorInfo.setErrorMessage(ex.getMessage());

    return Response.status(statusCode).entity(ex).build();
    }
}


@XmlRootElement(name = "errorInfo")
@XmlType(propOrder = { "errorCode", "errorMessage"})
public class ErrorInfo {
private String errorCode;
private String errorMessage;


public String getErrorCode() {
    return errorCode;
}
public void setErrorCode(String errorCode) {
    this.errorCode = errorCode;
}
public String getErrorMessage() {
    return errorMessage;
}
public void setErrorMessage(String errorMessage) {
    this.errorMessage = errorMessage;
}
}
4

1 回答 1

7

有同样的问题,对我来说设置内容类型明确解决了这个问题:

return Response.status(statusCode).entity(ex).type(MediaType.APPLICATION_JSON).build();
于 2012-11-09T13:26:05.443 回答