symfony - 带有自定义 JSON 主体的 Api 平台自定义 Controller

标签 symfony swagger swagger-ui api-platform.com

我正在尝试在 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/

相关文章:

java - SpringFox Swagger 与 Springboot 应用程序集成

springfox 2.2.2 没有生成 api 文档

使用带有 nginx rsync 的 docker 的 Symfony 缓存权限

php - 有没有办法创建 Doctrine 2 实体管理器的模拟并在 Symfony 2 PHPUnit 测试中为其提供模拟实体?

php - 动态目标实体 Doctrine 2 和 Symfony 2

php - Sulu 不显示模板更改

asp.net-core - 指定 Swagger 记录的 API

java - Spring boot 上的 Swagger 2 - 我可以为 API 下显示的所需参数添加句号吗?

c# - 使用 servicestack 从 swagger-ui 中排除完整服务

c# - 如何将 Swagger 设置为默认起始页?