簡體   English   中英

DynamoDB 上的 ValidationException 與 AWS sdk for Java

[英]ValidationException on DynamoDB with AWS sdk for Java

我正在嘗試放置一個項目並在幾條語句后取回它,但我從 AWS 收到了一個神秘的錯誤。

class DataStore<Payload extends EventPayload> {   
    private final Clock clock;

    private final Table table;

    private final ObjectMapper objectMapper = new ObjectMapper();

    private final Class<Payload> payloadType;

    public DynamoDBEventStore(final Clock clock, final Class<Payload> eventClass, final String dataStoreName) {
        final AmazonDynamoDB client =
                AmazonDynamoDBClientBuilder.standard().build();

        final DynamoDB dynamoDB = new DynamoDB(client);

        this.table = dynamoDB.getTable(dataStoreName);
        this.clock = clock;
        this.payloadType = eventClass;
    }

    public void persist(final UUID eventId, final String aggregateId, final Long version, final Payload eventPayload) {
        final Map<String, Object> rawDomainEvent = Map.of(
                "EventId", eventId.toString(),
                "Timestamp", LocalDateTime.now(clock).toString(),
                "AggregateId", eventPayload.getAggregateKey(),
                "Version", version,
                "Payload", objectMapper.convertValue(eventPayload, Map.class)
        );
    
        final Item domainEvent = Item.fromMap(rawDomainEvent);
        table.putItem(domainEvent);
     }
    
        
    public void testEvent(final UUID eventId) {
        table.getItem("EventId", eventId.toString();
    }
}

如果我保存一個調用persist的項目,那么該項目將按預期保存(請參閱下面來自 DynamoDB 控制台的 JSON)。

 {
      "EventId": {
        "S": "8a2c1733-887d-42e1-b720-2e87dcf46269"
      },
      "Timestamp": {
        "S": "2021-10-10T04:18:56.465223700"
      },
      "Payload": {
        "M": {
          "transactions": {
            "L": []
          },
          "aggregateKey": {
            "S": "bc406432-37f1-440f-9157-b0ce8da814c1"
          }
        }
      },
      "Version": {
        "N": "1"
      },
      "AggregateId": {
        "S": "bc406432-37f1-440f-9157-b0ce8da814c1"
      }
    }

但是當我調用testEvent時,它無法返回以下錯誤:

  "message": "Unable to unmarshall exception response with the unmarshallers provided (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: E6M3NI8CTF05ONUC5G25H53PT7VV4KQNSO5AEMVJF66Q9ASUAAJG; Proxy: null)",

關於我的代碼可能有什么問題的任何想法? 僅供參考,我正在使用 Java 11、Spring Boot 2.5.4 和 AWS SDK 1.12.81:

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-dynamodb</artifactId>
    <version>1.12.81</version>
</dependency>

錯誤消息並不那么神秘,忽略解組部分,剩下的就是

Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; 

我猜,您的eventId無法在數據庫中找到 - 但您需要從此處進行調試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM