Spring cloud函数路由api网关空指针异常



我在使用API网关头进行路由时遇到问题。我使用org.springframework.cloud.function.adapter.aws.FunctionInvoker::handleRequest作为处理程序请求。我有两个功能,它们在本地工作。如果我设置环境变量,它们就会工作。

如果我使用API网关头(spring.cloud.function.definition:小写(,我得到:

{
"errorMessage": "java.lang.NullPointerException",
"errorType": "java.lang.NullPointerException",
"stackTrace": [
"org.springframework.cloud.function.adapter.aws.AWSLambdaUtils.generateMessage(AWSLambdaUtils.java:123)",
"org.springframework.cloud.function.adapter.aws.FunctionInvoker.handleRequest(FunctionInvoker.java:105)",
"java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
"java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)",
"java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)",
"java.base/java.lang.reflect.Method.invoke(Unknown Source)"
]
}

重现问题的代码示例如下:https://github.com/cygi/cloudexample

POM基于Spring Cloud Function代码库中的样本(示例代码(https://github.com/spring-cloud/spring-cloud-function/tree/main/spring-cloud-function-samples/function-sample-aws-routing)。Spring Cloud Function的版本是3.2.1(示例有一个SNAPSHOT版本,它使用JAVA 11,这在AWS Lambda中是不可用的,至少没有docker(。

恢复到Spring Cloud函数3.1.6已经解决了这个问题。

AWS Lambda:测试活动

{
"body": "foo",
"httpMethod": "POST",
"isBase64Encoded": false,
"headers": {
"spring.cloud.function.definition": "uppercase"
}
}

3.2.2 结果

{
"statusCode": 417,
"headers": null,
"body": "Failed to establish route, since neither were provided: 'spring.cloud.function.definition' as Message header or as application property or 'spring.cloud.function.routing-expression' as application property."
}

3.1.6 结果

{
"isBase64Encoded": false,
"headers": {
"id": "758c1873-9377-25af-5ca2-84f55710ff2a",
"contentType": "application/json",
"timestamp": "1644500775689"
},
"body": ""bbbb"",
"statusCode": 200
}