Playframework 2.0 重头戏2多体分析器

Playframework 2.0 重头戏2多体分析器,playframework-2.0,Playframework 2.0,如何使控制器的动作方法包含两个不同的bodyparser?比如说, @BodyParser.Of(BodyParser.Json.class) @BodyParser.Of(BodyParser.FormUrlEncoded.class) public static Result register() { RequestBody body = request().body(); JsonNode node = body.asJson(); Map<String,

如何使控制器的动作方法包含两个不同的bodyparser?比如说,

@BodyParser.Of(BodyParser.Json.class)
@BodyParser.Of(BodyParser.FormUrlEncoded.class)
public static Result register() {

    RequestBody body = request().body();
    JsonNode node = body.asJson();
    Map<String, String[]> map = body.asFormUrlEncoded();

    if(node != null) {
        return ok("Got: " + node);
    } else if (map != null) {
        return ok("Got: " + map);
    } else {
        return badRequest("Expecting application/json request body");
    }
}
@BodyParser.Of(BodyParser.Json.class)
@BodyParser.Of(BodyParser.FormUrlEncoded.class)
公共静态结果寄存器(){
RequestBody body=request().body();
JsonNode=body.asJson();
Map Map=body.asFormUrlEncoded();
如果(节点!=null){
返回ok(“Got:+node”);
}else if(map!=null){
返回ok(“Got:+map”);
}否则{
返回badRequest(“预期的应用程序/json请求体”);
}
}

我认为它不遵守允许单个方法解析两种不同编码的约定。您基本上希望在一个控制器中包含两个控制器功能。我认为像这样用不同的方法处理不同的编码是最好的选择

private static void sharedApplicationLogic() { }

public static Result registerJSON() {
    JsonNode node = request().body().asJson();
    // Parse 
    sharedApplicationLogic();
}

public static Result registerFD() {
    Map<String,String[]> formdata = request().body().asFormUrlEncoded()
    // Parse
    sharedApplicationLogic();
}
(这不是很安静,但你明白了)

,通过确定这是在控制器功能中。我觉得这很难看,但我想这就是你想要的答案。诀窍是省略
@BodyParser
注释:

public static Result register() {

    RequestBody body = request().body();
    JsonNode node = body.asJson();
    Map<String, String[]> map = body.asFormUrlEncoded();

    if(node != null) {
        return registerJSON(node);
    } else if (map != null) {
        return registerFD(map);
    } else {
        return badRequest("Expecting application/json request body");
    }
}
公共静态结果寄存器(){
RequestBody body=request().body();
JsonNode=body.asJson();
Map Map=body.asFormUrlEncoded();
如果(节点!=null){
返回registerJSON(节点);
}else if(map!=null){
返回寄存器fd(map);
}否则{
返回badRequest(“预期的应用程序/json请求体”);
}
}
据我所知,没有比这更漂亮的方法了。可能不应该有,因为您希望将两个不同的方法映射到一个方法上

public static Result register() {

    RequestBody body = request().body();
    JsonNode node = body.asJson();
    Map<String, String[]> map = body.asFormUrlEncoded();

    if(node != null) {
        return registerJSON(node);
    } else if (map != null) {
        return registerFD(map);
    } else {
        return badRequest("Expecting application/json request body");
    }
}