【问题标题】:Aws dynamo db mapper is not converting dataAws dynamodb 映射器未转换数据
【发布时间】:2022-08-17 01:03:37
【问题描述】:

日志审计方法试图将复杂的 json 字符串转换为 map 以将数据以 json 的形式存储到 dynamodb 表中,但以错误 java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.amazonaws.services.dynamodbv2 结尾。模型.属性值

类审计服务{

            @Autowired
            AuditRepository auditRepository;
            ObjectMapper mapper = new ObjectMapper();
            public void logAudit(HttpServletRequest httpServletRequest, HttpServletResponse servletResponse) {
                
            Audit audit= new Audit();
            // coverting complex json string to map with help of mapper 
            audit.setEncryptedRequest(mapper.readValue(complex_multiLevel_json_String, new TypeReference<Map>() {})
            
            audit.save();
            }
          }  
            @Setter
            @Getter
            @Data
            @Builder
            @NoArgsConstructor
            @AllArgsConstructor
            @DynamoDBTable(tableName = \"Audit\")
            class Audit{
            ------
            ------
            ------
             private Map<String, AttributeValue> encryptedRequest;
             @DynamoDBTyped(DynamoDBMapperFieldModel.DynamoDBAttributeType.M)
                public Map<String, AttributeValue> getEncryptedRequest() {
                    return encryptedPiiRequest;
                }
            
                public void setEncryptedPiiRequest(Map<String, AttributeValue> encryptedRequest) {
                    this.encryptedRequest = encryptedRequest;
                }
                }








complex json string which need to store into dynamo db table in the form of map:

注意:我们不想创建具有以下 json 属性作为字段的模型类,然后将这些模型类存储到 dynamo db

\"{
    \"customers\": [
        {
            \"applicant\": {
                \"fName\": \"Duck\",
                \"lName\": \"PJOHN\",
                \"dob\": \"19270101\",
                \"ssn\": \"666455649\",
                \"suffix\": \"\"
            },
            \"phone\": [
                {
                    \"number\": 4239506,
                    \"type\": \"R\"
                }
            ],
            \"cAddress\": {
                \"line1\": \"5  LONG DR\",
                \"zipCode\": 37604
            },
            \"pAddress\": {
                \"line1\": \"100, Main St\",
                \"Code\": 12345
            }
        }
    ],
    \"iteam\": {
        \"Source\": \"amazon\",
        \"Type\": \"BOTH\"
    }
}\"



error:
java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.amazonaws.services.dynamodbv2.model.AttributeValue
    at com.amazonaws.services.dynamodbv2.datamodeling.StandardModelFactories$Rules$NativeType.set(StandardModelFactories.java:212) ~[aws-java-sdk-dynamodb-1.11.573.jar:na]
    at com.amazonaws.services.dynamodbv2.datamodeling.StandardModelFactories$AbstractRule.convert(StandardModelFactories.java:709) ~[aws-java-sdk-dynamodb-1.11.573.jar:na]
    at com.amazonaws.services.dynamodbv2.datamodeling.StandardModelFactories$AbstractRule.convert(StandardModelFactories.java:691) ~[aws-java-sdk-dynamodb-1.11.573.jar:na]
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTypeConverter$DelegateConverter.convert(DynamoDBTypeConverter.java:104) ~[aws-java-sdk-dynamodb-1.11.573.jar:na]
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTypeConverter$NullSafeConverter.convert(DynamoDBTypeConverter.java:123) ~[aws-java-sdk-dynamodb-1.11.573.jar:na]
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTypeConverter$DelegateConverter.convert(DynamoDBTypeConverter.java:104) ~[aws-java-sdk-dynamodb-1.11.573.jar:na]
    at com.amazonaws.services.dynamodbv2.datamodeling.StandardModelFactories$Rules$1.convert(StandardModelFactories.java:682) ~[aws-java-sdk-dynamodb-1.11.573.jar:na]
    at com.amazonaws.services.dynamodbv2.datamodeling.StandardModelFactories$Rules$1.convert(StandardModelFactories.java:680) ~[aws-java-sdk-dynamodb-1.11.573.jar:na]
    at com.amazonaws.services.dynamodbv2.datamodeling.StandardTypeConverters$Vector$ToMap.convert(StandardTypeConverters.java:425) ~[aws-java-sdk-dynamodb-1.11.573.jar:na]
    at com.amazonaws.services.dynamodbv2.datamodeling.StandardTypeConverters$Vector$ToMap$1.convert(StandardTypeConverters.java:413) ~[aws-java-sdk-dynamodb-1.11.573.jar:na]
    at com.amazonaws.services.dynamodbv2.datamodeling.StandardTypeConverters$Vector$ToMap$1.convert(StandardTypeConverters.java:410) ~[aws-java-sdk-dynamodb-1.11.573.jar:na]
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTypeConverter$DelegateConverter.convert(DynamoDBTypeConverter.java:104) ~[aws-java-sdk-dynamodb-1.11.573.jar:na]
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTypeConverter$NullSafeConverter.convert(DynamoDBTypeConverter.java:123) ~[aws-java-sdk-dynamodb-1.11.573.jar:na]
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTypeConverter$ExtendedConverter.convert(DynamoDBTypeConverter.java:83) ~[aws-java-sdk-dynamodb-1.11.573.jar:na]
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperFieldModel.convert(DynamoDBMapperFieldModel.java:138) ~[aws-java-sdk-dynamodb-1.11.573.jar:na]
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper$SaveObjectHandler.execute(DynamoDBMapper.java:739) ~[aws-java-sdk-dynamodb-1.11.573.jar:na]
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.save(DynamoDBMapper.java:641) ~[aws-java-sdk-dynamodb-1.11.573.jar:na]
    at com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.save(AbstractDynamoDBMapper.java:123) ~[aws-java-sdk-dynamodb-1.11.573.jar:na]
    at org.socialsignin.spring.data.dynamodb.core.DynamoDBTemplate.save(DynamoDBTemplate.java:146) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
    at org.socialsignin.spring.data.dynamodb.repository.support.SimpleDynamoDBCrudRepository.save(SimpleDynamoDBCrudRepository.java:115) ~[spring-data-dynamodb-5.1.0.jar:5.

    标签: java amazon-web-services spring-boot amazon-dynamodb microservices


    【解决方案1】:

    一种方法是将您的审计数据存储在 base64 编码属性中,使其具有通用性。但这意味着在读取时对其进行解码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多