![](/img/trans.png)
[英]passing POST request body through Amazon API Gateway to Lambda
[英]Amazon Lambda GET Request, Amazon API Gateway, Empty Query Parameter
我正在执行 Amazon API Gateway 的 GET 请求,我在映射模板中添加了以下 json
#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;
}
}
在亚马逊 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
如果您可以在日志“Input: , Hester”中看到这一行
我正在主类中打印 studentId,但它显示为空,如果它选择请求的第二个参数为什么不是第一个参数,我无法获取它?
通过在亚马逊api网关的GET方法中更改映射模板中的json
#set($inputRoot = $input.path('$'))
{
"httpMethod":"$context.httpMethod",
"studentId":"$input.params('studentId')",
"lastName":"$input.params('lastName')"
}
它修复了错误!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.