添加Micronaut Serde后AWS Lambda启动失败,提示无Bean内省
问题描述
使用Micronaut 3.9.4版本,已添加micronaut-serde-jackson依赖及对应注解处理器,以io.micronaut.function.aws.runtime.MicronautLambdaRuntime为启动类,执行以下命令打包AWS Lambda Native Image时:
mvn clean package -U -Dpackaging=docker-native -D"exec.mainClass"="io.micronaut.function.aws.runtime.MicronautLambdaRuntime" -D"micronaut.runtime"="lambda" -Pgraalvm -DskipTests
出现错误:
Request loop failed with: Error decoding HTTP response body: No bean introspection available for type [class com.amazonaws.serverless.proxy.model.AwsProxyRequest]. Ensure the class is annotated with io.micronaut.core.annotation.Introspected
解决方案
AwsProxyRequest是AWS Serverless Java Container库中的第三方类,无法直接添加@Introspected注解,需通过配置让Micronaut为该类生成Bean Introspection:
添加Introspection配置
在src/main/resources/application.yml中添加配置:micronaut: introspection: includes: - com.amazonaws.serverless.proxy.model.AwsProxyRequest - com.amazonaws.serverless.proxy.model.AwsProxyResponse若使用
application.properties,则配置为:micronaut.introspection.includes=com.amazonaws.serverless.proxy.model.AwsProxyRequest,com.amazonaws.serverless.proxy.model.AwsProxyResponse确认Serde依赖配置
确保Maven中已正确引入micronaut-serde-jackson的依赖与注解处理器:<dependency> <groupId>io.micronaut.serde</groupId> <artifactId>micronaut-serde-jackson</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>io.micronaut.serde</groupId> <artifactId>micronaut-serde-jackson-processor</artifactId> <scope>annotationProcessor</scope> </dependency>重新执行打包命令
修正原命令中的参数错误(-DskipTestsclear改为-DskipTests)后重新打包:mvn clean package -U -Dpackaging=docker-native -Dexec.mainClass=io.micronaut.function.aws.runtime.MicronautLambdaRuntime -Dmicronaut.runtime=lambda -Pgraalvm -DskipTests
内容的提问来源于stack exchange,提问作者Prashant Gupta

