Java Amazon Lambda获取请求,Amazon API网关,空查询参数
我正在做AmazonAPI网关的GET请求,我在映射模板中添加了以下jsonJava Amazon Lambda获取请求,Amazon API网关,空查询参数,java,amazon-web-services,aws-lambda,amazon-dynamodb,aws-api-gateway,Java,Amazon Web Services,Aws Lambda,Amazon Dynamodb,Aws Api Gateway,我正在做AmazonAPI网关的GET请求,我在映射模板中添加了以下json #set($inputRoot = $input.path('$')) { "httpMethod": "$context.httpMethod", "studentId": $input.json('studentId'), "lastName": $input.json('lastName') } 我正在按以下要求打电话 此API与JAVA lambda函数链接 这是主课 public class
#set($inputRoot = $input.path('$'))
{
"httpMethod": "$context.httpMethod",
"studentId": $input.json('studentId'),
"lastName": $input.json('lastName')
}
我正在按以下要求打电话
此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;
}
}
我的Request.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;
}
}
amazon lambda的cloud watch上正在生成的日志是
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
如果你能在日志中看到这一行
“输入:,Hester”
我正在主课堂上打印studentId,但它显示为空,如果它选择了请求的第二个参数,我无法获取它为什么不选择第一个参数 通过在AmazonAPI网关的GET方法内的映射模板中更改json
#set($inputRoot = $input.path('$'))
{
"httpMethod":"$context.httpMethod",
"studentId":"$input.params('studentId')",
"lastName":"$input.params('lastName')"
}
它修正了错误 我可能缺少一些有用的信息。。。您是否正在传递请求主体?它看起来是什么样子的?它是一个简单的GET请求,查询参数为通用的xxxxxxxxx.execute api.ap-south-1.amazonaws.com/dev/dynamodb/{studentId}/{lastName}和特定的xxxxxxxxx.execute-api.ap-south-1.amazonaws.com/dev/dynamodb/1be6a1be6f6-e8d8-4394-cfb46c/Hester