Amazon Lambda GET 请求、Amazon API 网关、空查询参数



我正在执行亚马逊API网关的GET请求,我在映射模板中添加了以下json。

#set($inputRoot = $input.path('$'))
{
"httpMethod": "$context.httpMethod",
"studentId": $input.json('studentId'),
"lastName": $input.json('lastName')
}

我正在点击以下请求

amazon-lambda-api-link

此 API 与 JAVA lambda 函数链接

这是主类

public class LambdaFunctionHandler {
public static Object handleRequest(Request request, Context context) {
context.getLogger().log("Input: " + request.getStudentId() + " , " + request.getLastName());
Student student = null;
switch (request.getHttpMethod()) {
case "POST":
student = request.getStudent();
DynamoDbRepository.insertIntoDynamoDB(student);
return "Successfully inserted into DynamoDB table";
case "PUT":
student = request.getStudent();
DynamoDbRepository.updateStudentDetails(student);
return "Successfully updated into DynamoDB table";
case "GET":
student = DynamoDbRepository.getOneStudentDetails(request.getStudentId(), request.getLastName());
return student;
case "DELETE":
Student delete_student = new Student();
delete_student.setStudentId(request.getStudentId());
delete_student.setLastName(request.getLastName());
DynamoDbRepository.deleteStudentDetails(delete_student);
return "Successfully deleted into DynamoDB table";
}
// TODO: implement your handler
return null;
}
}

我的请求.java类代码是:-

public class Request {
private String httpMethod;
private String studentId;
private String lastName;
private Student student;
public String getHttpMethod() {
return httpMethod;
}
public void setHttpMethod(String httpMethod) {
this.httpMethod = httpMethod;
}
public String getStudentId() {
return studentId;
}
public void setStudentId(String studentId) {
this.studentId = studentId;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}

}

在亚马逊lambda的云监视上生成的日志是

START RequestId: 38ffca9c-c713-47b7-a5fa-af9a894f70ff Version: $LATEST
org.apache.http.impl.conn.PoolingHttpClientConnectionManager - Closing connections idle longer than 60000 MILLISECONDS
Input: , Hester
Student[studentId]; no HASH key value present: com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: Student[studentId]; no HASH key value present at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel.convertKey(DynamoDBMapperTableModel.java:329) at com.amazonaws.services.dynamodbv2.da
Student[studentId]; no HASH key value present: com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException
com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: Student[studentId]; no HASH key value present
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel.convertKey(DynamoDBMapperTableModel.java:329)
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel.convertKey(DynamoDBMapperTableModel.java:310)
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.load(DynamoDBMapper.java:409)
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.load(DynamoDBMapper.java:433)
at com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.load(AbstractDynamoDBMapper.java:85)
at com.techprimers.serverless.repository.DynamoDbRepository.getOneStudentDetails(DynamoDbRepository.java:31)
at com.techprimers.serverless.LambdaFunctionHandler.handleRequest(LambdaFunctionHandler.java:23)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
END RequestId: 38ffca9c-c713-47b7-a5fa-af9a894f70ff

如果可以在日志中看到此行 "输入:,海斯特"

我正在主类中打印 studentId,但它显示为空,如果它选择请求的第二个参数,我无法获得它,为什么不是第一个参数?

通过在亚马逊 API 网关的 GET 方法中更改映射模板中的 json

#set($inputRoot = $input.path('$'))
{
"httpMethod":"$context.httpMethod",
"studentId":"$input.params('studentId')",
"lastName":"$input.params('lastName')"
}

它修复了错误!

最新更新