2017-10-02 15 views
1

dynamoDbからアイテムを取得しようとしています。しかし、私はpartitonキーを使用して単一の項目を取得するときはすべて正常に動作しますが、私はエラーをencouterスキャンを使用してダイナモdbのすべての項目を取得しようとすると。私がやろうとしていますどのようなコードを以下に示します。DynamoDbスキャンが正常に動作しない

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: PageCmsDomain[restrictions]; could not unconvert attribute 
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel.unconvert(DynamoDBMapperTableModel.java:271) 
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.privateMarshallIntoObject(DynamoDBMapper.java:456) 
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.marshallIntoObjects(DynamoDBMapper.java:484) 
at com.amazonaws.services.dynamodbv2.datamodeling.PaginatedScanList.<init>(PaginatedScanList.java:64) 
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.scan(DynamoDBMapper.java:1458) 
at com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.scan(AbstractDynamoDBMapper.java:216) 
at com.astro.ott.dynamodb.cmsapi.impl.PageCmsDaoImpl.getAllPages(PageCmsDaoImpl.java:74) 
at com.astro.ott.cmsapi.impl.PageCmsGetServiceImpl.getPages(PageCmsGetServiceImpl.java:41) 
at com.astro.ott.cms_api.cms_api.PageCmsTestCase.get(PageCmsTestCase.java:81) 

Caused by: com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: not supported; requires @DynamoDBTyped or @DynamoDBTypeConverted 
at com.amazonaws.services.dynamodbv2.datamodeling.StandardModelFactories$Rules$NotSupported.get(StandardModelFactories.java:660) 
at com.amazonaws.services.dynamodbv2.datamodeling.StandardModelFactories$Rules$NotSupported.get(StandardModelFactories.java:650) 
at com.amazonaws.services.dynamodbv2.datamodeling.StandardModelFactories$AbstractRule.unconvert(StandardModelFactories.java:714) 
at com.amazonaws.services.dynamodbv2.datamodeling.StandardModelFactories$AbstractRule.unconvert(StandardModelFactories.java:691) 
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTypeConverter$DelegateConverter.unconvert(DynamoDBTypeConverter.java:109) 
at com.amazonaws.services.dynamodbv2.datamodeling.StandardTypeConverters$Vector$ToMap.unconvert(StandardTypeConverters.java:433) 
at com.amazonaws.services.dynamodbv2.datamodeling.StandardTypeConverters$Vector$ToMap$1.unconvert(StandardTypeConverters.java:417) 
at com.amazonaws.services.dynamodbv2.datamodeling.StandardTypeConverters$Vector$ToMap$1.unconvert(StandardTypeConverters.java:410) 
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTypeConverter$DelegateConverter.unconvert(DynamoDBTypeConverter.java:109) 
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTypeConverter$NullSafeConverter.unconvert(DynamoDBTypeConverter.java:128) 
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTypeConverter$ExtendedConverter.unconvert(DynamoDBTypeConverter.java:88) 
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperFieldModel.unconvert(DynamoDBMapperFieldModel.java:146) 
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperFieldModel.unconvertAndSet(DynamoDBMapperFieldModel.java:164) 
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel.unconvert(DynamoDBMapperTableModel.java:267) 
... 32 

も単一の項目を取得しながら、私は同じPageCmsDomainを使用しています:

public List<PageCmsDomain> getAllPages() { 
    DynamoDBUtil dynamoDBUtil = new DynamoDBUtil(); 
    AmazonDynamoDB dynamoDBClient = dynamoDBUtil.getDynamoDBClient(); 
    DynamoDBMapper mapper = new DynamoDBMapper(dynamoDBClient); 
    List<PageCmsDomain> scanResult = mapper.scan(PageCmsDomain.class, new 
    DynamoDBScanExpression()); 
    return scanResult; 

エラーに続いて、私はこのコードを実行するとしています。

+0

PageCmsDomainクラスにrestrictionという属性がありますか?この属性の定義を表示してください。また、データがこの属性で一貫しているかどうかを確認してください。 – notionquest

+0

はい私は制限属性を持っています。これは次のように定義されています '@DynamoDBAttribute(attributeName = "制限") \tプライベートマップ制限; ' –

答えて

0

指定されたコードは、restrictionsフィールドがnullまたは空のマップの場合にのみ機能します。それ以外の場合、DynamoDBはフィールドがオブジェクトタイプ(ジェネリックタイプ、この場合はマップの値タイプObject)であるオブジェクトを保存またはフェッチできないため、例外をスローします。代わりに、特定のタイプ(たとえばString, Integer, Map<String, Integer>) 。

@DynamoDBAttribute(attributeName = "restrictions") 
@DynamoDBTypeConvertedJson 
private Map<String, Object> restrictions; 

別のオプションは、独自のカスタムを指定することです:あなたはDynamoDBTypeConvertedJson注釈を追加することにより、restrictionsフィールドのシリアル化された値を格納することを修正することができます restrictionsマップの値型は、特定のものに変更することができない場合は

コンバータークラスと注釈制限フィールド @DynamoDBTypeConverted(converter = CustomConverter.class)

関連する問題