0

私は広大なバックエンドの世界に慣れていません。私はJackson ObjectMapperを使って自分のアイテムを "Student"に変換するのに苦労しています。私は正面から送信されたidパラメータに基づいて適切なアイテムを実際に取得する方法を得ました。これは動作するメソッドですが、何も返さないのは、動作しているかどうかをテストしたかったからです。IDに基づいてDynamoDBから項目を取得し、項目を変換する

AwsService:ちょうど私がよ参考として

public Student getStudent(String id){ 

    Table t = db.getTable(studentTableName); 

    GetItemSpec gio = new GetItemSpec() 
      .withPrimaryKey("id", id); 

    Item item = t.getItem(gio); 

    //Problem starts here, unsure of how to do. As is, getS() is underlined as error 
    Student student = mapper.readValue(item.get("payload").getS(), Student.class); 

    return student; 
} 

public void getStudent(String id){ 

    Table t = db.getTable(studentTableName); 

    GetItemSpec gio = new GetItemSpec() 
      .withPrimaryKey("id", id); 

    Item item = t.getItem(gio); 
    System.out.println("Student: "+item); // <--- Gives the correct item! 

} 

しかし、今、私はそれがとても代わりにボイドの、「学生」を返す必要があり、それは学生を返す必要がありますすべての学生を取得するための私の働く方法を追加してください。あなたが見ることができるように、私はすべての学生を取得するための方法と同じmapper.readValueを使用しようとしました:。

public List<Student> getStudents() { 

    final List<Student> students = new ArrayList<Student>(); 

    ScanRequest scanRequest = new ScanRequest() 
      .withTableName(studentTableName); 

    ScanResult result = client.scan(scanRequest); 
    try { 
     for (Map<String, AttributeValue> item : result.getItems()) { 
      Student student = mapper.readValue(item.get("payload").getS(), Student.class); 
      students.add(student); 
     } 
    } catch (Exception e) { 
     throw new RuntimeException(e); 
    } 

    return students; 
} 
+0

し、それがどのようになる試してみてください。ここでは私のための正しい方法があります。 DynamodbとStudentクラスのすべての属性名が一致することを願っています!そうしないと、他のエラーが発生することがあります。 – notionquest

+0

さて、それは助けになります!コンソールには正しいデータが表示されますが、その間には '\'が表示されます。エラーコード92はこのようになります:[link](http://yuluer.com/page/dggeggjd-unexpected-character-code-92-in-jackson.shtml)私は "student"のためにescapeJsonを使ってみましたが、エスケープ・ジャクソン。何か案は? – Alex

+0

JSON文字列を印刷する標準的な方法であるため、コンソール出力のエスケープ文字は心配しません。主な目的は、すべての値が入力されたStudentオブジェクトを返すことです。代わりに、エスケープ文字なしでデータを出力するStudent object.toString()を印刷することもできます。 元の問題が解決した場合は、問題なく回答を受け入れてください。 – notionquest

答えて

1

すること(「ペイロード」)item.getを交換してください(GETS)「item.getJSON(と"ペイロード")。substring(1) "。

+0

バックスラッシュで、私が疑ったように問題が発生しました。私自身の答えの下に。私は私の方法でエスケープ・ジーンを入れ子にしなければならなかった。 – Alex

0

私はそれを理解しました。 "ストリング(1)。 "item.getJSON(" ペイロード)" と()を取得します( "ペイロード")item.getを交換し

public Student getStudent(String id) throws JsonParseException, JsonMappingException, IOException { 

    Table t = db.getTable(studentTableName); 

    GetItemSpec gio = new GetItemSpec() 
      .withPrimaryKey("id", id); 

    Item item = t.getItem(gio); 

    Student student = mapper.readValue(StringEscapeUtils.unescapeJson(item.getJSON("payload").substring(1)), Student.class); 

    return student; 

} 
関連する問題