我最近在尝试调试时浪费了很多时间。归结为输入反序列化。通过aws控制台(https://console.aws.amazon.com/lambda/home)中的Test
按钮可以正常工作的函数,当通过端点调用时返回{"message": "Internal server error"}
。
这是我使用Test
按钮进行测试的请求正文,通过了:
请求:
{
"body": {
"firstName": "Nawab",
"lastName": "Iqbal"
}
}
响应:
{
"body": "Hello Nawab Iqbal.",
"statusCode": 200
}
这是我的api端点调用的样子,失败了:
curl -X POST 'https://***.execute-api.us-east-1.amazonaws.com/default/hello***20' -H 'Content-Type: application/json' -d ' { "firstName": "Nawab", "lastName": "Iqbal"} '
在两种情况下,不同之处在于aws对输入正文进行反序列化的方式。
我创建了此仓库以方便显示差异:
用于使端点正常工作(UI测试失败时) https://github.com/niqbal/hellow_aws_lambda/blob/master/main/java/com/iqbal/InputClassApiEndpoint.java
用于使UI测试正常工作(直接api端点失败时) https://github.com/niqbal/hellow_aws_lambda/blob/master/main/java/com/iqbal/InputClassAwsConsole.java
我找不到任何文档说明为何存在这种差异以及Request Body类的良好模式,因此不必创建两个包装器类。我做错什么了吗?