【问题标题】:Api Platform custom controller with custom JSON body具有自定义 JSON 主体的 Api Platform 自定义控制器
【发布时间】:2018-12-11 09:05:13
【问题描述】:

我正在尝试在 Api 平台中创建自定义操作/控制器/操作。

基本上,我需要在 Swagger 中记录的自定义操作,但不是 ApiResource,因为操作接收的 JSON 正文在数据库中没有相应的实体。

身体看起来像这样:

[
    {
       "someEntityId": "2",
       "message": "test message",
       "userId": "11"
    },
    {
       "someEntityId": "8",
       "message": "test message two",
       "userId": "16"
    }
]

正如我所说,我不能拥有ApiResource,因为这会破坏 REST 原则,并且具有这些字段的实体不存在。我正在使用这些数据来执行一些自定义业务逻辑,并且这个 JSON 被反序列化为 DTO,准确地说是 DTOs 的集合。

至少我认为,带有路由的常规 Symfony 控制器应该是可行的方法,但即使带有控制器注释,我也无法让这条路由显示在 Swagger 中。

我试过了:

/**
 * @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 中的所有字段都被发送。

非常感谢任何帮助!

【问题讨论】:

  • 你是怎么做到的?你能在这里发布解决方案吗?

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


【解决方案1】:

使用所有字段创建响应的 DTO,然后使用 symfony 序列化程序对其进行反序列化。然后,您可以调用 Symfony 验证器或您创建的每个 DTO 并相应地返回您的响应。

【讨论】:

    猜你喜欢
    • 2013-07-18
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    相关资源
    最近更新 更多