Web Play Framework 2.x始终发送单个响应代码
希望你们能帮我!我有一个问题,无论请求包含什么,我都需要发送一个恒定的响应代码。如果请求有错误的JSON等,我需要发送的响应是204(无内容) 这是我的代码,我试图发回一个无内容头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(); } 现在,如果我尝试发送
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错误的请求:(