i want deserialize json "{\"m\":{\"test\":{\"nombre\":\"jose\",\"apellidos\":\"jose\",\"edad\":30}}}" in personacontainer.
public class persona { private string nombre; private string apellidos; private int edad; ... getters , setters; } public class personacontainer { private map m = new hashmap<string,persona>(); public map getm() { return m; } public void setm(map m) { this.m = m; } } then i, create object of persona , put inside persona container next code
public class myjsontest { public static void main(string args[]) { objectmapper mapper = new objectmapper(); map m = new hashmap<string,persona>(); persona p = new persona(); p.setnombre("jose"); p.setapellidos("jose"); p.setedad(30); m.put("test", p); personacontainer per = new personacontainer(); per.setm(m); //convert map json string try { system.out.println(mapper.writevalueasstring(per)); } catch (ioexception e) { e.printstacktrace(); } // convert json map string json = "{\"m\":{\"test\":{\"nombre\":\"jose\",\"apellidos\":\"jose\",\"edad\":30}}}"; try { personacontainer pers = mapper.readvalue(json, personacontainer.class); persona per1 = (persona) pers.getm().get("test"); system.out.println(per1.getnombre()); } catch (exception e) { e.printstacktrace(); } } } after serialization, use objectmapper deserialize json in personacontainer object, when try obtain "test" hashmap "m" , cast person object error:
java.lang.classcastexception: java.util.linkedhashmap cannot cast persona @ myjsontest.main(myjsontest.java:52) any advice please?
given
private map m = ...; jackson has no idea types expect map's keys , values. therefore uses defaults. regular objects, uses linkedhashmap. in other words, deserialize
{"nombre":"jose","apellidos":"jose","edad":30} into linkedhashmap instance. when try use persona, fails classcastexception.
instead, don't use raw types. declare map proper generic arguments.
private map<string, persona> m = ...; note spring deserialize corresponding json (m) linkedhashmap, not hashmap. if want hashmap, declare field type hashmap.
Comments
Post a Comment