Web Play Framework 2.x始终发送单个响应代码

Web Play Framework 2.x始终发送单个响应代码,web,playframework,http-headers,playframework-2.0,Web,Playframework,Http Headers,Playframework 2.0,希望你们能帮我!我有一个问题,无论请求包含什么,我都需要发送一个恒定的响应代码。如果请求有错误的JSON等,我需要发送的响应是204(无内容) 这是我的代码,我试图发回一个无内容头 public Result response(){ RequestBody body = request().body(); System.out.println(body.asJson()); return noContent(); } 现在,如果我尝试发送

希望你们能帮我!我有一个问题,无论请求包含什么,我都需要发送一个恒定的响应代码。如果请求有错误的JSON等,我需要发送的响应是204(无内容)

这是我的代码,我试图发回一个无内容头

    public Result response(){
    RequestBody body = request().body();
        System.out.println(body.asJson());
        return noContent();
    }
现在,如果我尝试发送一个包含JSON的请求,如下所示。它返回一个400(错误请求)。不管怎样,我都要发204。请告诉我你们有什么想法

JSON POST
{
   "mike":"mike
}
谢谢

编辑:

很抱歉,我替换了其中一行代码,但忘记更新此代码。上面我只返回204,但如果我的客户端发送了错误的JSON,那么我仍然返回400。

试试这个

@BodyParser.Of(BodyParser.Json.class)
public static Result response() {
    JsonNode json = request().body().asJson();

    if(json == null){
        return noContent();
    }else{
        // Get json content from request and process rest..
    }
    return ok("");
}

通过使用上述方法,非JSON请求将自动返回204 HTTP响应。

要返回204,可以使用noContent方法


为此,将
ok()
替换为
noContent()
您需要修改全局播放设置。 创建一个扩展全局设置的类,并覆盖您想要的任何方法

public class Global extends GlobalSettings {
@Override
    public Promise<Result> onBadRequest(RequestHeader arg0, String arg1) {
         super.onBadRequest(arg0, arg1);
        return F.Promise.promise(()->{return play.mvc.Results.noContent();});
    }
}
公共类全局扩展全局设置{
@凌驾
公共承诺onBadRequest(RequestHeader arg0,字符串arg1){
super.onBadRequest(arg0,arg1);
return F.Promise.Promise(()->{return play.mvc.Results.noContent();});
}
}

有关更多信息:

如果不是JSON,请不要调用
asJson
。也许我不明白您想要实现什么,但您可以始终返回一个204 HTTP响应代码,返回状态为
return status(204)
@Ryan传入的请求几乎总是JSON,但有时客户端会向我发送其他内容。在我的例子中,我仍然需要返回一个204。@Kris即使我有一个直接的
public Result answer(){return status(204)}
并且我发送了一些错误的JSON,我也会得到一个400返回一个400错误的请求:(