在Play框架中的另一个Controller中重用Controller的结果

时间:2013-06-20 14:33:22

标签: java playframework playframework-2.1

道歉,如果已经回答了这个问题 - 我已经看了一眼,找不到任何东西。

使用Play框架,我定义了两个控制器 - 一个是返回JSON的公共API,另一个是此API的使用者,它将JSON呈现为HTML。例如。我的路线文件如下:

GET     /foos       controllers.App.foos() #produces HTML
GET     /api/foos   controllers.API.foos() #produces JSON

项目的要求是我们的数据只能通过我们的公共API访问。因此,我想要实现此方法的方法是让App.foos()调用API.foos(),解析JSON结果,并将其传递给要呈现的模板。例如:

public App extends Controller {
  public static Result foos() {
    Result result = API.foos();
    // TODO: get the JSON out of the result object
  }
}

有人能告诉我如何从结果对象中提取JSON吗?我可以使用((SimpleResult)result.getWrappedResult()).body()将对象的主体作为枚举器获取,但我仍然不清楚如何获取JSON。

因为我是Pl​​ay框架的新手,也许我会解决这个错误,并且有更简单/更好的方法来做到这一点?

非常感谢, 詹姆斯

1 个答案:

答案 0 :(得分:0)

最简单的方法是公开底层方法。

public Api extends Controller {

  public static Result foos() {
    Ok(foosJson());
  }

  public static JsValue foosJson() {
    // ...
  }
}

public App extends Controller {

  public static Result foos() {
    JsValue json = API.foosJson();
  }
}