Java Amazon Lambda获取请求,Amazon API网关,空查询参数

Java 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

我正在做AmazonAPI网关的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;
    }



}
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