我尝试编写一个动作,调用其他控制器的其他几个动作。这些操作期望JSON作为请求主体:
JsonNode jsonNode = request().body().asJson();
如何使用特定请求正文(JSON)调用其他操作?
限制:我无法修改其他控制器。
答案 0 :(得分:1)
我建议使用播放的反向路由功能,向目标Call
获取Action Method
,将其转换为网址并使用WSClient
为了发送您的请求。在scala中,假设您要向名为POST
的{{1}}控制器中的操作方法发送Application
请求:
index
相同的想法适用于Java API,但我不太熟悉细节
答案 1 :(得分:0)
我还没有对此进行过测试,但我认为这应该可以解决问题。这个版本适用于scala,我不熟悉Play Java。
def actionJson: Action[JsValue] = Action(parse.json) { request =>
Ok("json body")
}
def actionAny: Action[AnyContent] = Action.async { request =>
actionJson(request.map(_.asJson)).run
}