Json string to java object mapping failed with jackson -
i trying map json pojo class jackson receiving null values. if remove @jsonignoreproperties annotation throws exception of unrecognized property
json:
{ "tilelevel":[ ], "systemlevel":[ { "title":"test system level alert", "description":"<div class=\"externalclassa5aac8f74c874a2d9db8337eb6685b2a\"><p>test system level alert<br></p><p>check url http://www.google.com<br></p><p><span style=\"font-size:32px;\">formatting tested</span><br></p></div>", "announcementtype":"system level", "activef":null, "tilename":null } ], "announcements":[ { "title":"test announcement", "description":"<div class=\"externalclass16980d07d2fb4ab58a2e97c16b7626d3\"><p>testing..... <img src=\"/sites/salesbk-cn/sitecollectionimages/salesbook%20announcements/allitems/00007-confiz-test-doc7.png\" alt=\"00007-confiz-test-doc7.png\" style=\"margin:5px;\" /><br></p></div>", "announcementtype":"announcement", "activef":null, "tilename":null } ] } i getting json string , trying convert string java object.
here pojo classes:
public class spoannouncement { @jsonignoreproperties private map<string, list<list<spoannouncements_properties>>> tilelevel; private map<string, list<list<spoannouncements_properties>>> systemlevel; private map<string, list<list<spoannouncements_properties>>> announcements; public map<string, list<list<spoannouncements_properties>>> gettilelevel() { return tilelevel; } public void settilelevel(map<string, list<list<spoannouncements_properties>>> tilelevel) { tilelevel = tilelevel; } public map<string, list<list<spoannouncements_properties>>> getsystemlevel() { return systemlevel; } public void setsystemlevel(map<string, list<list<spoannouncements_properties>>> systemlevel) { systemlevel = systemlevel; } public map<string, list<list<spoannouncements_properties>>> getannouncements() { return announcements; } public void setannouncements(map<string, list<list<spoannouncements_properties>>> announcements) { announcements = announcements; } } public class spoannouncements_properties { private string title; private string description; private string announcementtype; private string activef; private string tilename; public string gettitle() { return title; } public void settitle(string title) { title = title; } public string getdescription() { return description; } public void setdescription(string description) { description = description; } public string getannouncementtype() { return announcementtype; } public void setannouncementtype(string announcementtype) { announcementtype = announcementtype; } public string getactivef() { return activef; } public void setactivef(string activef) { activef = activef; } public string gettilename() { return tilename; } public void settilename(string tilename) { tilename = tilename; } } my test method verify if result has been mapped json object:
@test public void convertjsontoobject() throws ioexception { objectmapper mapper = new objectmapper(); mapper.disable(deserializationfeature.fail_on_unknown_properties); spoannouncement spoannouncement = mapper.readvalue(response, spoannouncement.class); system.out.print(spoannouncement); }
your pojo structures invalid. check out http://www.jsonschema2pojo.org - online tool generating java pojos json.
your classes should more or less below, need replace activef , tilename fields preffered types.
-----------------------------------com.example.announcement.java----------------------------------- package com.example; import java.util.hashmap; import java.util.map; import com.fasterxml.jackson.annotation.jsonanygetter; import com.fasterxml.jackson.annotation.jsonanysetter; import com.fasterxml.jackson.annotation.jsonignore; import com.fasterxml.jackson.annotation.jsoninclude; import com.fasterxml.jackson.annotation.jsonproperty; import com.fasterxml.jackson.annotation.jsonpropertyorder; @jsoninclude(jsoninclude.include.non_null) @jsonpropertyorder({ "title", "description", "announcementtype", "activef", "tilename" }) public class announcement { @jsonproperty("title") private string title; @jsonproperty("description") private string description; @jsonproperty("announcementtype") private string announcementtype; @jsonproperty("activef") private object activef; @jsonproperty("tilename") private object tilename; @jsonignore private map<string, object> additionalproperties = new hashmap<string, object>(); @jsonproperty("title") public string gettitle() { return title; } @jsonproperty("title") public void settitle(string title) { this.title = title; } @jsonproperty("description") public string getdescription() { return description; } @jsonproperty("description") public void setdescription(string description) { this.description = description; } @jsonproperty("announcementtype") public string getannouncementtype() { return announcementtype; } @jsonproperty("announcementtype") public void setannouncementtype(string announcementtype) { this.announcementtype = announcementtype; } @jsonproperty("activef") public object getactivef() { return activef; } @jsonproperty("activef") public void setactivef(object activef) { this.activef = activef; } @jsonproperty("tilename") public object gettilename() { return tilename; } @jsonproperty("tilename") public void settilename(object tilename) { this.tilename = tilename; } @jsonanygetter public map<string, object> getadditionalproperties() { return this.additionalproperties; } @jsonanysetter public void setadditionalproperty(string name, object value) { this.additionalproperties.put(name, value); } } -----------------------------------com.example.spoannouncement.java----------------------------------- package com.example; import java.util.hashmap; import java.util.list; import java.util.map; import com.fasterxml.jackson.annotation.jsonanygetter; import com.fasterxml.jackson.annotation.jsonanysetter; import com.fasterxml.jackson.annotation.jsonignore; import com.fasterxml.jackson.annotation.jsoninclude; import com.fasterxml.jackson.annotation.jsonproperty; import com.fasterxml.jackson.annotation.jsonpropertyorder; @jsoninclude(jsoninclude.include.non_null) @jsonpropertyorder({ "tilelevel", "systemlevel", "announcements" }) public class spoannouncement { @jsonproperty("tilelevel") private list<object> tilelevel = null; @jsonproperty("systemlevel") private list<systemlevel> systemlevel = null; @jsonproperty("announcements") private list<announcement> announcements = null; @jsonignore private map<string, object> additionalproperties = new hashmap<string, object>(); @jsonproperty("tilelevel") public list<object> gettilelevel() { return tilelevel; } @jsonproperty("tilelevel") public void settilelevel(list<object> tilelevel) { this.tilelevel = tilelevel; } @jsonproperty("systemlevel") public list<systemlevel> getsystemlevel() { return systemlevel; } @jsonproperty("systemlevel") public void setsystemlevel(list<systemlevel> systemlevel) { this.systemlevel = systemlevel; } @jsonproperty("announcements") public list<announcement> getannouncements() { return announcements; } @jsonproperty("announcements") public void setannouncements(list<announcement> announcements) { this.announcements = announcements; } @jsonanygetter public map<string, object> getadditionalproperties() { return this.additionalproperties; } @jsonanysetter public void setadditionalproperty(string name, object value) { this.additionalproperties.put(name, value); } } -----------------------------------com.example.systemlevel.java----------------------------------- package com.example; import java.util.hashmap; import java.util.map; import com.fasterxml.jackson.annotation.jsonanygetter; import com.fasterxml.jackson.annotation.jsonanysetter; import com.fasterxml.jackson.annotation.jsonignore; import com.fasterxml.jackson.annotation.jsoninclude; import com.fasterxml.jackson.annotation.jsonproperty; import com.fasterxml.jackson.annotation.jsonpropertyorder; @jsoninclude(jsoninclude.include.non_null) @jsonpropertyorder({ "title", "description", "announcementtype", "activef", "tilename" }) public class systemlevel { @jsonproperty("title") private string title; @jsonproperty("description") private string description; @jsonproperty("announcementtype") private string announcementtype; @jsonproperty("activef") private object activef; @jsonproperty("tilename") private object tilename; @jsonignore private map<string, object> additionalproperties = new hashmap<string, object>(); @jsonproperty("title") public string gettitle() { return title; } @jsonproperty("title") public void settitle(string title) { this.title = title; } @jsonproperty("description") public string getdescription() { return description; } @jsonproperty("description") public void setdescription(string description) { this.description = description; } @jsonproperty("announcementtype") public string getannouncementtype() { return announcementtype; } @jsonproperty("announcementtype") public void setannouncementtype(string announcementtype) { this.announcementtype = announcementtype; } @jsonproperty("activef") public object getactivef() { return activef; } @jsonproperty("activef") public void setactivef(object activef) { this.activef = activef; } @jsonproperty("tilename") public object gettilename() { return tilename; } @jsonproperty("tilename") public void settilename(object tilename) { this.tilename = tilename; } @jsonanygetter public map<string, object> getadditionalproperties() { return this.additionalproperties; } @jsonanysetter public void setadditionalproperty(string name, object value) { this.additionalproperties.put(name, value); } } remember serialize if you're creating webservice ;).
Comments
Post a Comment