Java 在Play框架的另一个控制器中重用控制器的结果

Java 在Play框架的另一个控制器中重用控制器的结果,java,playframework,playframework-2.1,Java,Playframework,Playframework 2.1,如果已经回答了,我会道歉-我已经看了一眼,什么也找不到 使用Play框架,我定义了两个控制器——一个是返回JSON的公共API,另一个是该API的使用者,该API将JSON表示为HTML。例如,我的路线文件如下所示: GET /foos controllers.App.foos() #produces HTML GET /api/foos controllers.API.foos() #produces JSON 该项目的一个要求是,我们的数据只能通过我们的公共

如果已经回答了,我会道歉-我已经看了一眼,什么也找不到

使用Play框架,我定义了两个控制器——一个是返回JSON的公共API,另一个是该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

因为我对游戏框架还不熟悉,也许我在这方面做得不对,有更简单/更好的方法吗

多谢各位,
James

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

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();
  }
}

谢谢你的回答。不幸的是,我们需要直接使用API,因此我认为这可能是不允许的。我们已经决定暂时走这条路——这实际上可能更可取,因为将来公共api可能会与消费者物理分离。谢谢对您来说,使用web服务确实是最好的。处理结果的内容非常棘手,因为主体不是接口的一部分。您必须与不同的子类(或实现)相匹配,未来的更改很容易打破这一点。我认为你通过HTTP打了正确的电话。