2017-12-20 23 views
0

複雑なクラスのコンバータークラスと列挙型の2番目のコンバータークラスを作成しました。AWS DynamoDB - コンバータクラス - "JSONを解析できません"

public class ObjectConverter<T extends Object> implements DynamoDBTypeConverter<String, T> { 

ObjectMapper objectMapper = new ObjectMapper(); 

@Override 
public String convert(T object) { 
    try { 
     return objectMapper.writeValueAsString(object); 
    } catch (JsonProcessingException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    throw new IllegalArgumentException("Unable to parse JSON"); 
} 

@Override 
public T unconvert(String object) { 
    try { 
     T unconvertedObject = objectMapper.readValue(object, new TypeReference<T>() { 
     }); 
     return unconvertedObject; 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

これは、列挙型のためのコンバータクラスです:

public class EnumConverter<T extends Object> implements DynamoDBTypeConverter<String, List<T>> { 

@Override 
public String convert(List<T> objects) { 
    //Jackson object mapper 
    ObjectMapper objectMapper = new ObjectMapper(); 
    try { 
     String objectsString = objectMapper.writeValueAsString(objects); 
     return objectsString; 
    } catch (JsonProcessingException e) { 
     //do something 
    } 
    return null; 
} 

@Override 
public List<T> unconvert(String objectsString) { 
    ObjectMapper objectMapper = new ObjectMapper(); 
    try { 
     List<T> objects = objectMapper.readValue(objectsString, new TypeReference<List<T>>() { 
     }); 
     return objects; 
    } catch (JsonParseException e) { 
     //do something 
    } catch (JsonMappingException e) { 
     //do something 
    } catch (IOException e) { 
     //do something 
    } 
    return null; 
} 

私は複雑であり、レシピのクラスを持っているので、私はこれは私のコンバータクラスである@DynamoDBTypeConverted(コンバータ= ObjectConverter.class)

を使用しました問題はCRUDのメソッドをテストしようとするときです。私はaddProductメソッドを持っていますが、これはうまくいきます。addRecipeメソッドを作成してもほとんど同じですが、ここでPostmanに投稿中に問題があります。 、JSONを解析できません "。間違っている可能性が何

"Can not deserialize instance of java.util.ArrayList out of START_OBJECT token at [Source: {"id":null,"name":"test","labels":["GLUTEN_FREE"],"author":{"name":"Plejer Annołn","id":"testID2"},"media":{"name":"heheszki","url":" http://blabla.pl ","mediaType":"IMAGE"},"recipeElements":{"product":{"id":927c3ed3-400b-433d-9da0-1aa111dce584,"name":"bąkiKacpraNieŚmierdzą","calories":1000,"fat":400.0,"carbo":20.0,"protein":40.0,"productKinds":["MEAT"],"author":{"name":"Plejer Annołn","id":"testID2"},"media":{"name":"heheszki","url":" http://blabla.pl ","mediaType":"IMAGE"},"approved":false},"weight":"100"},"approved":false}; line: 1, column: 190] (through reference chain: pl.javamill.model.kitchen.Recipe["recipeElements"])"

:ログファイルから

情報?

答えて

0

RecipeElementProductを正しくマーシャリング/アンマーシャリングしていない可能性がありますが、例外がスローされても(RuntimeExceptions以外の場合)コンバータクラスのメソッドは常に値を返します。より良い方法は、@DynamoDBTypeConvertedJsonというクラスのgetRecipeElement()メソッドに注釈を付けることです。このメソッドは、すぐに使えるJSONマーシャリング/アンマーシャリングを提供します。郵便配達員に送信しているHTTPリクエストとは関係があります。 getProduct()setProduct()の方法と実際の郵便配達要求(機密情報なし)に関する詳細を追加する必要があります。

+0

私はいくつかのことを変更しましたが、ログファイルに次の情報があります。 "com.fasterxml.jackson.databind.JsonMappingException:recipeElementのSTART_OBJECTトークンからjava.util.ArrayListのインスタンスを逆シリアル化できません" –

+0

@ D.Zet私はこれがいくつかの古いデータのためでなければならないと思う。このオブジェクトが使われているクラスの内容は何ですか? – Vikdor

+0

質問を編集しました。詳細を確認してください –

関連する問題