1

現在、Jersey を実行する RESTful Web サービスを使用しています。最近、いくつかの認証処理を行うフィルターを追加しましたが、これはハッピー パスの場合に機能します。ただし、このフィルター内からエラーをスローする必要がある場合、例外をかなりの json 文字列にシリアル化する代わりに、次のエラーで 500 をスローします。

javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message
body writer for Java class myclass, and Java type class myclass, and MIME media type
application/octet-stream was not found

問題は、application/octet-stream に何も書きたくないということです。私のサービスは のみを使用しapplication/jsonます。これは、注釈を指定できる実際のResourceクラスでは問題になりません。@Producesリソースの本体からスローされたエラー応答は、適切にシリアル化されます。

私の質問は、次のとおりです。フィルター処理中にスローされる例外に使用される MIME タイプを制御するにはどうすればよいですか?

4

1 に答える 1

2

例外を処理してJSONに変換するには、例外マッパーを作成する必要があります。何かのようなもの:

@Provider
public class UnexpectedExceptionMapper implements ExceptionMapper<Exception>
{
  @Override
  public Response toResponse(final Exception exception)
  {
    ResponseBuilder builder = Response.status(Status.BAD_REQUEST)
                                      .entity(jsonError(exception))
                                      .type(MediaType.APPLICATION_JSON);
    return builder.build();
  }

  private String jsonError(final Exception exception)
  {
    return "{\"error\":\"" + exception.getMessage() + "\"}";
  }
}
于 2013-01-09T23:05:40.520 に答える