如何自动将传入的 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.PathBindable
或 play.mvc.QueryStringBindable
接口。
ObjectMapper
是昂贵的 class,因此请考虑使用以下形式绑定您的参数:
Form.form(Goal.class).bindFromRequest();
这是我的控制器方法现在的样子:
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.PathBindable
或 play.mvc.QueryStringBindable
接口。
ObjectMapper
是昂贵的 class,因此请考虑使用以下形式绑定您的参数:
Form.form(Goal.class).bindFromRequest();