【问题标题】:Post method not working with Class Object in Play 2.5Post 方法不适用于 Play 2.5 中的类对象
【发布时间】:2016-03-26 06:09:29
【问题描述】:

我尝试从 PostMan 调用 Post 方法,但无法调用。

控制器文件:

public class UserController extends Controller{

     public Result getAll() {
         List<User> users = new ArrayList<User>();
         users.add(new User("Vinit", "vinitsolanki@yahoo.com", 25));
         users.add(new User("Jaimin", "jaimin@yahoo.com", 25));
         return ok(Json.toJson(users));
     }

     public Result get(Long id) {

         User user = new User();
         user.setId(id);
         user.setName("Vinit");
         user.setEmail("vinitsolanki@yahoo.com");
         user.setAge(25);

         return ok(Json.toJson(user));

    }

     public Result create(User user){

         return ok(Json.toJson(user));
     }
}

路由文件:

#User
#Method.Type    url             mapping with method
GET             /user           controllers.UserController.getAll
GET             /user/:id       controllers.UserController.get(id: Long)
POST            /user           controllers.UserController.create

get 方法/url/user/:id 工作正常,但我对/user 的帖子有点困惑。我尝试了文件中的代码,但出现上述错误。

missing arguments for method create in class UserController;
follow this method with `_' if you want to treat it as a partially applied function

【问题讨论】:

  • 您的方法需要一个用户对象,但您没有传递它。
  • 我通过这个 json {"id":10,"name":"vinit","email":"vinit@yahoo.com"}
  • 但是该方法如何知道将此 json 转换为用户对象?
  • 是的,我对此感到困惑,我之前使用过 spring,在 spring 中我使用过 Jackson 文学,所以 Play 2.5 需要哪种文学/配置
  • 我可以使用 request().body().asJson() 获取用户对象。这是获取用户对象的正确方法吗? public Result create(){ User user = Json.fromJson(request().body().asJson(), User.class); return ok(Json.toJson(user)); }

标签: java playframework resteasy playframework-2.5


【解决方案1】:

基本上有两种方法可以做到这一点。

您可以使用默认正文解析器(这是您在评论中提到的方式):

public Result create() {
    JsonNode json = request().body().asJson();
    User user = Json.fromJson(json, User.class);
    return ok(Json.toJson(user));
}

第二种方法是使用显式正文解析器

@BodyParser.Of(BodyParser.Json.class)
public Result create() {
    RequestBody body = request().body();
    User user = // some logic here
    return ok(body.asJson());
}

奖励:您可以使用BodyParser.TolerantJson 代替BodyParser.Json:与Json 相同,但不验证Content-Type 标头是否为JSON。

欲了解更多信息,您可以查看Play documentation regarding body parsers

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-30
    • 2023-03-24
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多