HTTP Client Library for Javaで通信したInstagramのAPIのレスポンスの受け皿クラスを作成し、キャストしようと企んでいます。
以下キャスト用クラスです。
java
1@Getter 2public class クラスA extends GenericJson{ 3 @Key("pagination") 4 private HashMap<String, String> pagination; 5 @Key("meta") 6 private HashMap<String, String> meta; 7 @Key("data") 8 private List<DataBreakdown> data; 9 10 ~ 11 12 // inner class 13 @Getter 14 class DataBreakdown{ 15 @Key("attribution") 16 private Object attribution; 17 @Key("tags") 18 private List<String> tsgs; 19 @Key("type") 20 private String type; 21 @Key("location") 22 private Object location; 23 @Key("comments") 24 private HashMap<String, Object> comments; 25 @Key("filter") 26 private Object filter; 27 @Key("created_time") 28 private Object created_time; 29 @Key("link") 30 private String link; 31 @Key("likes") 32 private HashMap<String, Object> likes; 33 @Key("images") 34 private HashMap<String, Object> images; 35 @Key("users_in_photo") 36 private Object users_in_photo; 37 @Key("caption") 38 private HashMap<String, Object> caption; 39 @Key("user_has_liked") 40 private Object user_has_liked; 41 @Key("id") 42 private String id; 43 @Key("user") 44 private HashMap<String, String> user; 45 }
実行したところ、下記拡張forでエラーになります。
java
1 public List<HashMap<String, Object>> getInstagramImageData() { 2 List<HashMap<String, Object>> instagramImageList = new ArrayList<>(); 3 4 for (DataBreakdown oneData : data) { 5 HashMap<String, Object> instagramImageData = new HashMap<>(); 6 instagramImageData.put("images", oneData.getImages()); 7 instagramImageList.add(instagramImageData); 8 } 9 return instagramImageList; 10 }
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to クラスA$DataBreakdown ※クラス名は「クラスA」に変換しています
@Key("data")をHashMap<String, Object>にマッピング、objectで扱う分には特に問題ありません。
ただそうすると @Key("data")の中身をjavaで扱いづらいので、なんとか作成したクラスにマッピングしたいのですが、LinkedHashMap のキャストがうまくいかないようです。
javaの経験が乏しく具体的に何をどうしたら解決することが出来るのか分かりません。
詳しい方がいらしたら、アドバイスをお願いいたします。
なお、instagramのレスポンスを一部抜粋した内容は以下のとおりです。
"data": [ { "attribution": null, "tags": [ "北欧", "chihuahua", "チワワ", "熊", "dog", "bear", "クマ", "pet", "インテリア", "犬との暮らし", "マンション", "ビーズクッション", "暮らし", "愛犬" ], "type": "image", "location": null, "comments": { "count": 1, "data": [ { "created_time": "1446716528", ~
以下呼び出し元
java
1 public クラスA Access(String url) throws IOException { 2 クラスA instagramData; 3 try { 4 HttpRequestFactory requestFactory = httpTransport.createRequestFactory(); 5 GenericUrl genericUrl = new GenericUrl(url); 6 HttpRequest req = requestFactory.buildGetRequest(genericUrl); 7 HttpResponse res = req.execute(); 8 9 try { 10 instagramData = asInstagramObject(res.parseAsString()); 11 } finally { 12 res.disconnect(); 13 } 14 } finally { 15 httpTransport.shutdown(); 16 } 17 return instagramData; 18 } 19 20 // Json文字列をInstagramObjectに変換 21 private クラスA asInstagramObject(String stringJson) throws IOException { 22 ObjectMapper mapper = new ObjectMapper(); 23 クラスA json = mapper.readValue(stringJson, クラスA.class); 24 return json; 25 }
回答3件
あなたの回答
tips
プレビュー