首页 > 解决方案 > DynamoDB 对象集插入和获取

问题描述

我有以下 DynamoDB 表

@Builder
@DynamoDBTable(tableName = "rule_templates")
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class DynamoRuleTemplate {
    private String id;
    private DataType dataType;
    private String displayName;
    private String helpText;
    private String expression;
    private Set<Param> params;

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

    @DynamoDBAttribute(attributeName = "data_type")
    public DataType getDataType() {
        return dataType;
    }

    @DynamoDBAttribute(attributeName = "display_name")
    public String getDisplayName() {
        return displayName;
    }

    @DynamoDBAttribute(attributeName = "help_text")
    public String getHelpText() {
        return helpText;
    }

    @DynamoDBAttribute(attributeName = "expression")
    public String getExpression() {
        return expression;
    }

    @DynamoDBTypeConverted(converter = ParamSet.class)
    @DynamoDBAttribute(attributeName = "params")
    public Set<Param> getParams() {
        return params;
    }
}

这是参数类:

@Data
public class Param {

    private DataType dataType;
    private String identifier;
    private String displayName;
    private String helpText;
}

我正在通过 AWS CLI 用一些 json 形式的数据预先填充表格,例如:

{
  "id": {
    "S": "string-length-range"
  },
  "data_type": {
    "S": "STRING"
  },
  "display_name": {
    "S": "String length range"
  },
  "expression": {
    "S": "$val.length() <= $max && $val.length() >= $min"
  },
  "help_text": {
    "S": "String length range"
  },
  "params": {
    "L": [
      {
        "M": {
          "dataType": {
            "S": "INTEGER"
          },
          "displayName": {
            "S": "max"
          },
          "identifier": {
            "S": "$max"
          }
        }
      },
      {
        "M": {
          "dataType": {
            "S": "INTEGER"
          },
          "displayName": {
            "S": "min"
          },
          "identifier": {
            "S": "$min"
          }
        }
      }
    ]
  }
}

但是在使用 JAVA 应用程序从表中执行 GET 时,我在params字段中收到以下错误:com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: expected S in value {L: [{M: {identifier={ S: $max,}, displayName={S: max,}, dataType={S: INTEGER,}},}, {M: {identifier={S: $min,}, displayName={S: min,} , dataType={S: INTEGER,}, rule={M: {表达式={S: $min >= 0,}},}},}],}

有人可以帮助我使用正确的 json,以免出现上述错误吗?

标签: amazon-dynamodbaws-clidynamodb-queries

解决方案


推荐阅读