0

Restful Web サービスを実装するために Apache-cxf を使用しています。例外が発生した場合に備えて、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 に答える