0

为什么 Play 要给出一个 html 错误页面来发送一个没有有效 json 的请求,而不是让控制器让 action 方法处理它?我正在尝试编写一个返回 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

您必须在 Global 中定义 onBadRequest

来源: https ://www.playframework.com/documentation/2.3.x/JavaGlobal

于 2015-04-23T18:25:21.433 回答