DynamoDB Набор объектов Вставка и получение - PullRequest
0 голосов
/ 15 марта 2020

У меня есть следующая таблица 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;
    }
}

Вот класс Param :

@Data
public class Param {

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

Я предварительно заполняю таблицу некоторыми данными в форма от json до AWS CLI, например:

{
  "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"
          }
        }
      }
    ]
  }
}

Но при выполнении GET из таблицы с использованием приложения JAVA я получаю следующую ошибку для params поле: com.amazon aws .services.dynamodbv2.datamodeling.DynamoDBMappingException: ожидаемое S в значении {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, чтобы я не получил выше ошибка?

...