写入 Dynamo 表工作正常,但读取会引发 DynamoDBMappingException

Joe*_*sey 4 spring amazon-dynamodb

orderRequestDao.save(new OrderRequest("5000", "body"));成功执行会在 Dynamo 中放置一条记录。任何读取返回的尝试:

[Request processing failed; nested exception is com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException:
could not invoke null on class 
com.cfa.fulfillmentApi.model.OrderRequest 
with value 100 of type class java.lang.String] with root cause
Run Code Online (Sandbox Code Playgroud)

(id 为 100 的记录存在)

我正在使用以下 jars (aws.sdk.version: 1.11.86):

    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk</artifactId>
        <version>${aws.sdk.version}</version>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-core</artifactId>
        <version>${aws.sdk.version}</version>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-dynamodb</artifactId>
        <version>${aws.sdk.version}</version>
    </dependency>
    <dependency>
        <groupId>com.github.derjust</groupId>
        <artifactId>spring-data-dynamodb</artifactId>
        <version>4.4.1</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

DynamoDb 配置:

主分区键: id (String)

道:

@EnableScan
public interface OrderRequestDao extends CrudRepository<OrderRequest, String> {
    OrderRequest findOne(String s);
    OrderRequest save(OrderRequest or);
}
Run Code Online (Sandbox Code Playgroud)

域对象:

@DynamoDBTable(tableName = "dev_transx")
public class OrderRequest {

    private String id;
    private String body;

    public OrderRequest(String id, String body) {
        this.id = id;
        this.body = body;
    }

    public OrderRequest() {}

    @DynamoDBHashKey
    public String getId()
    {
        return id;
    }

    @DynamoDBAttribute
    public String getBody()
    {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    @Override
    public String toString() {
        return String.format(
                "Customer[id=%d, body='%s']",
                id, body);
    }

    @Override
    public int hashCode() {
        return id.hashCode();
    }

}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了域类中 id 的几乎所有数据类型,但没有运气。

Awa*_*esh 8

为该字段添加 setter 方法就像一个魅力


Joe*_*sey 6

我删除了,aws-java-sdk-dynamodb因为它已经在spring-data-dynamodb

最重要的是,我在域类中为 ID 添加了一个 setter。