Java 在Play框架的另一个控制器中重用控制器的结果
如果已经回答了,我会道歉-我已经看了一眼,什么也找不到 使用Play框架,我定义了两个控制器——一个是返回JSON的公共API,另一个是该API的使用者,该API将JSON表示为HTML。例如,我的路线文件如下所示: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 该项目的一个要求是,我们的数据只能通过我们的公共
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打了正确的电话。