这里有人成功地将 Micronaut GraphQL API 部署到 AWS Lambda 吗?

Anyone here deployed Micronaut GraphQL API to AWS Lambda successfully?

我根据以下文章创建了一个 GraphQL 端点: http://lifeinide.com/post/2019-04-15-micronaut-graphql-with-transaction-and-security-support/

它在我的本地机器上正常工作,但在参考 https://github.com/micronaut-projects/micronaut-aws/tree/master/examples/api-gateway-example.

部署到 AWS lambda 后就不行了

我用 postman 测试了 Lambda 的 /ping API,它运行良好。 但是,当我 post 一个 graphql 查询到 /graphql 端点时,它总是 return “415 Unsupported Media Type”。

我觉得少了点什么,但我不确定是什么,如果有人能给我指出如何让它发挥作用,我将不胜感激。

谢谢。

深入研究源代码后,我发现 graphQL post 端点已将 Consumes 属性 设置为 ALL,即 / 以接受任何内容类型,但在代码中它们具体指的是 application/json 或 application/graphQL。

当您使用 application/json 命中 graphQL post 端点时,MICRONAUT lambda 处理程序会将内容类型与 ALL 匹配,但事实并非如此,因此它会抛出错误 415 Unsupported Media Type。请求永远不会到达 graphQL 控制器。

当您使用 / 命中 graphQL post 端点时,MICRONAUT lambda 处理程序将内容类型与 ALL 匹配,这似乎是正确的,因此它转发了请求到 GraphQL 控制器,但在代码中它专门查找那些特定的内容类型。它再次依赖于 .equals 方法进行比较。它再次不匹配,因此抛出 422 无法处理的实体。

我仍在寻找解决方案。