基于Micronaut+Kotlin的Lambda函数无法通过URL正确调用
问题原因及解决方案
问题出在Lambda URL的请求事件格式与Micronaut默认Lambda处理器的适配性上:
- CLI和Lambda控制台测试时,你传入的是API Gateway V1格式的请求(包含
path字段),MicronautLambdaHandler可以正确解析路径,匹配对应控制器。 - 但Lambda URL发送的是API Gateway V2格式的事件,默认处理器无法正确提取请求路径,导致所有请求都被路由到根路径(
/)的控制器。
解决步骤:
- 添加V2事件支持依赖
在你的构建配置文件(如build.gradle.kts)中添加Micronaut AWS Lambda V2事件依赖:
implementation("io.micronaut.aws:micronaut-function-aws-lambda-events")
- 创建自定义Lambda Handler
在项目中新增一个Handler类,专门处理V2格式的事件:
package com.example import io.micronaut.function.aws.proxy.MicronautLambdaHandler import software.amazon.awssdk.services.lambda.runtime.events.APIGatewayV2HTTPEvent import software.amazon.awssdk.services.lambda.runtime.events.APIGatewayV2HTTPResponse class CustomLambdaHandler : MicronautLambdaHandler<APIGatewayV2HTTPEvent, APIGatewayV2HTTPResponse>()
- 更新Lambda函数处理器配置
在AWS Lambda控制台中,将函数的处理器设置为com.example.CustomLambdaHandler(替换原来的io.micronaut.function.aws.proxy.MicronautLambdaHandler)。
完成以上步骤后,重新部署Lambda函数,再通过公共URL调用/somefunc路径,就能正确返回对应控制器的结果了。
内容的提问来源于stack exchange,提问作者MadCatERZ
相关产品推荐
相关产品推荐

