SpringbootのRestTemplateを利用してjsonをデシリアライズを試みていますが、想定通りに変換されません。
①クライアント側プログラム
Java
1Result items = restTemplate.getForObject( 2 "https://XXX.co.jp/services/api/",Result.class);
②JSONデータ(実際にRESTAPIを実行した戻り値(大量となるため、一部を抜粋。))
JSON
1{ 2 "Items": [ 3 { 4 "Item": { 5 "author": "XXX", 6 } 7 }, 8 { 9 "Item": { 10 "author": "XXX", 11 } 12 }, 13 { 14 "Item": { 15 "author": "XXX", 16 } 17 } 18 ], 19 "hits": 30, 20} 21
実際には、author以外の項目、hits以外の項目を大量に保有していますが、省略しています。
③Resultクラス
Java
1@Getter 2@Setter 3@AllArgsConstructor 4@JsonIgnoreProperties(ignoreUnknown = false) 5public class Result { 6 7 private List<Item> items; 8 9 public Result() { 10 items = new ArrayList<>(); 11 } 12 13 @Override 14 public String toString() { 15 return String.valueOf(items.size()); 16 } 17 18} 19
④Itemクラス
Java
1@Getter 2@Setter 3@AllArgsConstructor 4@NoArgsConstructor 5@JsonIgnoreProperties(ignoreUnknown = true) 6public class Item { 7 8 private String title; 9 10 @Override 11 public String toString() { 12 return "Item{" + "title=" + title + '}'; 13 } 14 15}
上記を実行したところ、特にエラーが発生するでもないのですが、Resultクラスのitemsの要素数は0となっております。
(ResultクラスのtoStringを実行して確認しました。)
そのため、JSONからのデシリアライズに失敗しているのではないかと推測をしております。
想定通りにデシリアライズが成功しているのであれば、要素数は0以外の値となるはずです。(上記の例では3となる想定です)
RESTの戻り値は配列要素を保有しているため、デシリアライズした結果としてはリスト型として扱うことができればと思っております。
そもそもデシリアライズ先の構成が誤っている可能性もあります。
よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。