【问题标题】:Getting error java.lang.IllegalArgumentException获取错误 java.lang.IllegalArgumentException
【发布时间】:2020-04-01 19:07:29
【问题描述】:

这是我的代码。

package com.example.lambda.dynamodbdemo;

import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.document.Item;
import com.amazonaws.services.dynamodbv2.document.PutItemOutcome;
import com.amazonaws.services.dynamodbv2.document.spec.PutItemSpec;
import com.amazonaws.services.dynamodbv2.model.ConditionalCheckFailedException;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;

public class PuttingPersonHandler implements RequestHandler<Person, String> {
    private DynamoDB dynamoDb;
    private String TABLE_NAME = "People";
    private String REGION = "ap-northeast-2";

    @Override
    public String handleRequest(Person input, Context context) {
        this.initDynamoDbClient();

        putData(input);
        return "Saved Successfully!!";
    }

    private void initDynamoDbClient() {
        AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
                .withRegion(REGION).build();
         this.dynamoDb = new DynamoDB(client);
    }

    private PutItemOutcome putData(Person person) 
              throws ConditionalCheckFailedException {
                return this.dynamoDb.getTable(TABLE_NAME)
                  .putItem(
                    new PutItemSpec().withItem(new Item()
                            .withPrimaryKey("id",person.id)
                            .withString("firstName", person.firstName)
                            .withString("lastName", person.lastName)));
            }
}

class Person {
    int id;
    String firstName;
    String lastName;
}

当我尝试使用此 json 按摩在 AWS Lambda 上运行函数时,

{
  "id": "1",
  "firstName": "Min",
  "lastName": "Heo"
}

我得到了这个错误

输入值不能为空:java.lang.IllegalArgumentException java.lang.IllegalArgumentException:输入值不能为空 在 com.amazonaws.services.dynamodbv2.document.internal.InternalUtils.rejectNullValue(InternalUtils.java:595) 在 com.amazonaws.services.dynamodbv2.document.internal.InternalUtils.checkInvalidAttribute(InternalUtils.java:620) 在 com.amazonaws.services.dynamodbv2.document.Item.withString(Item.java:108) 在 com.example.lambda.dynamodbdemo.PuttingPersonH​​andler.putData(PuttingPersonH​​andler.java:38) 在 com.example.lambda.dynamodbdemo.PuttingPersonH​​andler.handleRequest(PuttingPersonH​​andler.java:22) 在 com.example.lambda.dynamodbdemo.PuttingPersonH​​andler.handleRequest(PuttingPersonH​​andler.java:1)

有没有办法解决这个错误?

【问题讨论】:

    标签: java amazon-web-services aws-lambda amazon-dynamodb


    【解决方案1】:

    来自https://docs.aws.amazon.com/lambda/latest/dg/java-handler-io-type-pojo.html::

    需要 get 和 set 方法才能使 POJO 与 AWS Lambda 的内置 JSON 序列化程序一起工作

    【讨论】:

      猜你喜欢
      • 2019-05-08
      • 1970-01-01
      • 2020-06-03
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多