这是我的控制器方法现在的外观:

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)


但这似乎不起作用,因为我收到“编译错误[未找到:键入目标]”

最佳答案

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

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

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

关于java - 如何自动将传入的JSON绑定(bind)到POJO? ( Play 2.3.7-Java),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28182557/

10-09 09:44