如何自动将传入的 JSON 绑定到 POJO? (播放 2.3.7 -- Java)

How do I automatically bind my incoming JSON to a POJO? (Play 2.3.7 -- Java)

这是我的控制器方法现在的样子:

public static Result createGoal() {
    JsonNode json = request().body().asJson();
    ObjectMapper mapper = new ObjectMapper();
    return ok(toJson(Goal.create(mapper.convertValue(json, Goal.class))));
  }

这是我希望的样子:

public static Result createGoal(Goal goal) {
    return ok(toJson(Goal.create(goal)));
}

我猜我的路由文件会因此发生变化:

POST       /goals               controllers.Goals.createGoal()

为此:

POST       /goals               controllers.Goals.createGoal(goal: Goal)

但这似乎不起作用,因为我得到 "Compilation error[not found: type Goal]"

在您的路由中,您需要在 Goal class 前加上完整的包名。更多,播放!需要知道如何将查询或路径参数绑定到 Goal class,因此考虑实现 play.mvc.PathBindableplay.mvc.QueryStringBindable 接口。

ObjectMapper 是昂贵的 class,因此请考虑使用以下形式绑定您的参数:

Form.form(Goal.class).bindFromRequest();