0

コントローラーがアクション メソッドで処理できるようにするのではなく、有効な json を持たないリクエストを送信したときに Play が html エラー ページを表示したいのはなぜですか? Json 応答を返す RESTful サービスを作成しようとしていますが、この問題はブロッカーです。

提供された BodyParser アノテーションを使用してみました: BodyParser.TolerantJson.class

@BodyParser.Of(value = BodyParser.TolerantJson.class, maxLength = 2 * 1024)

これは、コンテンツ タイプのヘッダーで送信されたものを無視し、アクション メソッドで処理できるようにすることになっていますが、そうではないようです。これはバグですか?ヘッダーのコンテンツ タイプをテキストに設定すると、無効な json が許可されます (できますが、顧客にこれを行わせたくありません。送信する必要があるため、json ヘッダーを無視したくありません。

私が得ている応答は、次のテキストを含む html ページです。

For request 'POST /api/v1/create' [Invalid Json]

参考までに、Java コードを次に示します。

@BodyParser.Of(value = BodyParser.TolerantJson.class, maxLength = 2 * 1024) //2KB
public static Result create() {

    //none of this code executes when the header is json
    PojoApiResponse response;

    JsonNode body = request().body().asJson();

    response = XternalPartnerApiService.create(body);

    JsonNode ret = Json.toJson(response);

    if(response.getHttpStatus() == Http.Status.BAD_REQUEST){
        return badRequest(ret);
    } else {
        return ok(ret);
    }
}
4

1 に答える 1

0

グローバルで onBadRequest を定義する必要があります

ソース: https://www.playframework.com/documentation/2.3.x/JavaGlobal

于 2015-04-23T18:25:21.433 に答える