2017-07-11 3 views
0

ネストされたJSON以下のいる機能私はDynamoDBのを作成したい構造

  1. PK:orderId
  2. RK:出荷date
  3. Y|N
  4. 詳細:<nested json structure>

ポイント4は私が本当に混乱しているものです。私は文字列としてdetailsフィールドを維持し、文字列としてjsonを保存しようとした場合、AWSはすなわち"文字をエスケープ{"onlineStore" : "283"}{\"onlineStore\": \"283\"}

なりこれのは、文字列マッピングなどdetailsとDynamoDBのから正しく取得が、私はそれを変換する必要があれば取​​得ジャックソンを使ったポホ、私はそれらの世話をしなければならない\

だから代替として、私は私が上記の実装ではdetailsPOJOすなわち、

public class OrderDetail{ 
    private int onlineStore; 
    // rest of the JSON properties 

    @JsonCreator 
    public OrderDetail (@JsonProperty("onlineStore") int onlineStore, ...){ 
     this.onlineStore = onlineStore;   
    } 
} 

を作成することができると考え、私はDynamoDBMappingException: Couldn't convert attribteというエラーが発生します。

OrderDetailタイプは、JSON RESTレスポンスとの間で使用されている一般的なタイプです。DynamoDBのアノテーションをここに入れないようにしたいと思います。

今の質問は、それを実装するための適切な方法はどうあるべきかです。

答えて

0

DynamoDB Mapper classを使用してCRUD操作を実行する場合は、注釈@DynamoDBTypeConvertedJsonを使用して注文の詳細を保存できます。

DynamoDBTypeConvertedJson - 詳細

DynamoDBMapperクラスのため、このリンクをチェックしてください: -

Java用AWS SDKは、あなたが にDynamoDBのにあなたのクライアント側のクラスをマッピングできるように、DynamoDBMapperクラスを提供しますテーブル。 DynamoDBMapperを使用するには、あなたのコード内で DynamoDBのテーブル内の項目と、それに対応するオブジェクトインスタンス間の関係を定義します。 DynamoDBMapperクラスは、あなたが、あなたのテーブルにアクセス は様々な作成、読み取り、更新、および(CRUD)操作を削除し、 クエリを実行実行することができます。

サンプル実装: -

@DynamoDBTable(tableName = "Order") 
public class Order implements Serializable { 

    private static final long serialVersionUID = -3534650012619938612L; 

    private String orderId; 

    private OrderDetail orderDetail; 

    @DynamoDBHashKey(attributeName = "orderId") 
    @DynamoDBAutoGeneratedKey 
    public String getOrderId() { 
     return orderId; 
    } 

    public void setOrderId(String orderId) { 
     this.orderId = orderId; 
    } 

    @DynamoDBTypeConvertedJson 
    public OrderDetail getOrderDetail() { 
     return orderDetail; 
    } 

    public void setOrderDetail(OrderDetail orderDetail) { 
     this.orderDetail = orderDetail; 
    } 

} 

public class OrderDetail implements Serializable { 

    private static final long serialVersionUID = 7312390212027563305L; 
    private Integer onlineStore; 

    public Integer getOnlineStore() { 
     return onlineStore; 
    } 

    public void setOnlineStore(Integer onlineStore) { 
     this.onlineStore = onlineStore; 
    } 

    @Override 
    public String toString() { 
     return "OrderDetail [onlineStore=" + onlineStore + "]"; 
    } 

} 

public Order loadOrder(String orderId) { 

    DynamoDBMapper dynamoDBMapper = new DynamoDBMapper(dynamoDBClient); 

    Order order = dynamoDBMapper.load(Order.class, orderId, 
      new DynamoDBMapperConfig(DynamoDBMapperConfig.ConsistentReads.CONSISTENT)); 

    System.out.println("Order : " + order.toString()); 
    System.out.println("Order Id : " + order.getOrderId()); 
    System.out.println("Order Detail : " + order.getOrderDetail()); 
    System.out.println("Online store : " + order.getOrderDetail().getOnlineStore()); 

    return order; 

} 

出力: - DDBで

Order Id : 0beced28-f1de-4c44-8094-6de687d25e97 
Order Detail : OrderDetail [onlineStore=1] 
Online store : 1 

データ: -

はあなたが言及したように、注文の詳細ウィルlエスケープ文字で保存する。ただし、DynamoDBマッパーを使用してデータを取得すると、デシリアライズされた形式(POJOオブジェクトなど)になります。

enter image description here

関連する問題