1

アプリケーションですべての http 例外 (400、404、500、...) をキャッチするために、ExceptionMapper を作成しました。

    @Provider
    public class MyExceptionHandler implements ExceptionMapper<Exception> {

    @Override
    public Response toResponse(Exception ex) {
        //Some Code to build Response
    }

残念ながら、Content-Type:application/json の本文が空または間違った形式の POST リクエストを送信すると、このエラーが発生し、MyExceptionHandler でキャッチできません。

Status Code: 400 Bad Request

No content to map due to end-of-input
 at [Source: org.apache.catalina.connector.CoyoteInputStream@5774bb5e; line: 1, column: 1]

私は何を間違えましたか?

どうもありがとう。

環境: JAX-RS、GlassFish 3

編集: このエラーは AppServer に関連しており、そこで処理する必要があると思います。

4

1 に答える 1

2

不正な形式のボディなどの不正なリクエストがある場合は、WebApplicationExceptionがスローされます。例外マッパーの選択方法は次のとおりです

  • 空のエンティティ本体を持つ WebApplicationException またはそのサブクラスの 1 つがスローされると、ランタイムは、WebApplicationException 例外を処理する例外マッパーがあるかどうかを確認します。例外マッパーがある場合、コンシューマーに送信される応答を作成するために使用されます。

  • WebApplicationException 例外またはそのサブクラスの 1 つ以外の例外がスローされると、ランタイムは適切な例外マッパーをチェックします。スローされた特定の例外を処理する場合、例外マッパーが選択されます。スローされた特定の例外の例外マッパーがない場合は、例外の最も近いスーパークラスの例外マッパーが選択されます。

ここに私がお勧めするものがあります

  • 登録するExceptionMapper<WebApplicationException>

  • を登録しExceptionMapper<Throwable>て、500 サーバー エラーを通知する一般的な応答で他のすべての例外をキャッチします。

于 2013-03-15T20:12:47.590 に答える