コントローラーがアクション メソッドで処理できるようにするのではなく、有効な 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);
}
}