java - DynamoDB 的嵌套和组合注释不起作用

标签 java amazon-dynamodb

我有一个相当简单的java对象结构,带有注释,但不起作用。它看起来像这样:

@DynamoDBDocument
public class Job {

    @DynamoDBHashKey
    private String id;

    @DynamoDBAttribute(attributeName = "mapping")
    private Definition definition;
}

@DynamoDBDocument
public class Definition {
    @DynamoDBAttribute(attributeName = "calculationMap")
    @DynamoDBTypeConverted(converter = AssignmentsConverter.class)
    private Map<String, Calculation> assignments;
}

dynamo 中的信息如下所示:

mapping: {
    calculationMap: {
        attribute1: "string representing Calculation",
        attribute2: "string representing Calculation"
    }
}

因此,我希望我的 java Job 对象看起来像这样:

definition: {
    assignments: {
        attribute1: Calculation1,
        attribute2: Calculation2
    }
}

但是,注释无法正确反序列化 map 。转换器代码永远不会被调用,并且我最终得到一个具有映射的作业对象,但映射中的分配字段为空。所以基本上它看起来像这样:

definition: {
    assignments: null
}

转换器本身相当简单,因此除非有要求,否则我不会提供代码。但是,它不应该引起问题,因为它甚至没有被调用。

在添加 @DynamoDBAttribute 注释并更改 java 字段的名称之前,代码工作正常。虽然名称都匹配,所以我担心它可能与各种注释之间的交互有关?我真的不确定。

最佳答案

我花了几个小时绞尽脑汁试图解决这个问题,结果发现这对我来说是一个简单的错误 - 我正在查看 DynamoDB 以查看我正在提取的数据,但在某些时候我已经覆盖了它为 null 并且没有刷新。通过刷新 DynamoDB 中的 View ,我可以看到它现在为空。我将 calculationMap 重置为有效值,瞧,它按预期工作。

关于java - DynamoDB 的嵌套和组合注释不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59253527/

相关文章:

java - 如何在 Java 中运行与主线程分开的线程?

java - 关于如何在没有 GLSL 的情况下实现这种效果的任何想法

java - Elasticsearch : Consecutive Page navigation using spring-data-elasticsearch results empty after certain limit

amazon-web-services - nosql/dynamodb 哈希和范围用例

amazon-web-services - DynamoDB LastEvaluatedKey 在内部是如何工作的?

javascript - 发电机 : How to append to list values in document

java - Log4j、Tapestry 5.1、独立 Jetty 6 不兼容?

java - 如何在dynamodb查询中使用保留关键字 'year'

amazon-web-services - 带排序键的无服务器框架Dynamo DB表资源定义

Java JIT 编译器导致 OutOfMemoryError