我正在尝试在 Api 平台中创建自定义操作/ Controller /操作。
基本上,我需要在 Swagger 中记录的自定义操作,但不是 ApiResource
因为 Action 接收的 JSON 正文在数据库中没有相应的实体。
body 看起来像这样:
[
{
"someEntityId": "2",
"message": "test message",
"userId": "11"
},
{
"someEntityId": "8",
"message": "test message two",
"userId": "16"
}
]
正如我所说,我不能拥有
ApiResource
因为这会破坏 REST 原则,并且不存在具有这些字段的实体。我正在使用此数据来执行一些自定义业务逻辑,并将此 JSON 反序列化为 DTO
,精准收藏DTOs
.带路由的常规 Symfony Controller 应该是可行的方法,至少我认为,但我无法在
Swagger
中显示此路由即使有 Controller 的注释。我试过这个:
/**
* @Route(
* methods={"POST"},
* name="api_post_notify_users",
* path="/api/users/notify_users",
* )
* @SWG\Post(
* path="/api/users/notify_users",
* summary="Summary",
* description="Description",
* produces={"application/json"},
* @SWG\Response(
* response=200,
* description="Success",
* )
* )
* @return Response
*/
public function __invoke()
{
$data = $this->get('request_stack')->getCurrentRequest()->getContent();
return new Response($data);
}
不知道我错过了什么。另外,有没有办法根据
DTO
验证这个 JSON 数组?所以要确保 JSON 中的所有字段都被发送。任何帮助深表感谢!
最佳答案
使用所有字段创建响应的 DTO,然后使用 symfony 序列化器反序列化它。然后,您可以调用 Symfony 验证器或您创建的每个 DTO 并相应地返回您的响应。
关于symfony - 带有自定义 JSON 主体的 Api 平台自定义 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53720654/