繁体   English   中英

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

[英]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')
 }

我正在点击以下请求

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;
    }
}

我的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM