私は広大なバックエンドの世界に慣れていません。私は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;
}
し、それがどのようになる試してみてください。ここでは私のための正しい方法があります。 DynamodbとStudentクラスのすべての属性名が一致することを願っています!そうしないと、他のエラーが発生することがあります。 – notionquest
さて、それは助けになります!コンソールには正しいデータが表示されますが、その間には '\'が表示されます。エラーコード92はこのようになります:[link](http://yuluer.com/page/dggeggjd-unexpected-character-code-92-in-jackson.shtml)私は "student"のためにescapeJsonを使ってみましたが、エスケープ・ジャクソン。何か案は? – Alex
JSON文字列を印刷する標準的な方法であるため、コンソール出力のエスケープ文字は心配しません。主な目的は、すべての値が入力されたStudentオブジェクトを返すことです。代わりに、エスケープ文字なしでデータを出力するStudent object.toString()を印刷することもできます。 元の問題が解決した場合は、問題なく回答を受け入れてください。 – notionquest