java - Parse JSON and delegate to defaultDeserializer within a JsonDeserializer -
in order deserialize map need read property within json object.
i added custom deserializer parses json , sets found type within context attribute. attribute later used within second deserializer deserializes custom map of user.
unfortunately solution fails since i'm changing currenttoken of jsonparser. defaultdeserializer therefore not able continue parsing response.
caused by: java.lang.nullpointerexception @ com.fasterxml.jackson.databind.deser.beandeserializer._deserializeother(beandeserializer.java:151) @ com.fasterxml.jackson.databind.deser.beandeserializer.deserialize(beandeserializer.java:144) @ userdeserializer.deserialize(userdeserializer.java:36)
@override public user deserialize(jsonparser jsonparser, deserializationcontext ctxt) throws ioexception, jsonprocessingexception { jsonnode node = jsonparser.readvalueastree(); jsonnode typenode = node.get("type"); string typename = schemanode.get("name").textvalue(); ctxt.setattribute("typename", typename); user userresponse = (user) defaultdeserializer.deserialize(jsonparser, ctxt); return userresponse; }
my json looks this:
{ "username": "test", "type": { "name": "testtype" }, "map": { "test": 1234 } }
is there way reset json parser or use different one? or specific jsonnode used deserializing?
changing json not option.
you use objectmapper instead
@override public user deserialize(string jsonstring) throws ioexception, jsonprocessingexception { objectmapper objectmapper = new objectmapper(); user user = objectmapper.readvalue(jsonstring, user.class); return user; }
or use objectmapper , populate user setters if has any.
@override public user deserialize(string jsonstring) throws ioexception, jsonprocessingexception { objectmapper objectmapper = new objectmapper(); hashmap<string, object> map = new hashmap<string, object>(); map = objectmapper.readvalue(jsonstring, hashmap.class); user user = new user(); user.setusername(map.get("username")); user.settype(map.get("type")); user.setmap(map.get("map")); return user; }
Comments
Post a Comment