やりたいこと
ObjectMapperでJSONが入れ子構造になっているJSONを
Javaオブジェクトにデシリアライズしたい。
対象JSONは、
・dates, page, results, total_pages, total_resultsが項目として存在。
・dates内に2つ項目が含まれている。
・results内が配列で、かつ複数項目が含まれている。
エラーの原因と解決策
JavaのBeansクラスが正しく構成されていなかった。
JSONの入れ子構造に合わせて、Beansを構成しなければいけない。
MainController.java
ObjectMapper mapper = new ObjectMapper();
try {
Json list = mapper.readValue(json, Json.class);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Json.classが最上階層のBeanクラス。
Dates, Resultsがさらに入れ子で入っているため、
型はそれぞれDates, Resultsになっている。
さらに、ResultsはJSONで配列になっているため、Listになる。
Json.class
public class Json {
private Dates dates;
private String page;
private List<Results> results;
private String total_pages;
private String total_results;
//以下ゲッターとセッターを実装。
Dates.class
package com.example.movie.dto;
public class Dates.java {
private String maximum;
private String minimum;
//以下ゲッターとセッターを実装。
Results.java
public class Results {
private boolean adult;
private int[] genre_ids;
private int id;
private String language;
private String title;
private String overview;
//以下ゲッターとセッターを実装。