i have third party class specialobject as:
public class specialobject { private string name; private integer id; private date date; public string getfoo() {return "foo";} //outlier public string getname() { return name;} public integer getid() {return id;} public date getdate() {return date;} public void setname(string name) {this.name = name;} public void setid(integer id) {this.id = id;} public void setdate(date date) {this.date = date;} }
i wish project out name , date properties when serializing it. using magic of mixinannotation jackson, created mixin interface as:
@jsonautodetect(gettervisibility = visibility.none) public interface specialobjectmixin { @jsonproperty public string getname(); @jsonproperty public date getdate(); }
in order facilitate handling of specialobject parameter, have defined specialobjecthandler implements fromstring() method.
@override public specialobject fromstring(string json) { try { return objectmapper.readvalue(json, specialobject.class); } catch (ioexception exception) { throw new illegalargumentexception("unable write json output", exception); } }
when deserializer invokes method, objectmapper throws error
caused by: org.codehaus.jackson.map.exc.unrecognizedpropertyexception: unrecognized field "foo" (class com.kilo.specialobject), not marked ignorable @ [source: java.io.stringreader@2d2217da; line: 1, column: 60] (through reference chain: com.kilo.specialobject["foo"]) @ org.codehaus.jackson.map.exc.unrecognizedpropertyexception.from(unrecognizedpropertyexception.java:53) @ org.codehaus.jackson.map.deser.stddeserializationcontext.unknownfieldexception(stddeserializationcontext.java:267) @ org.codehaus.jackson.map.deser.std.stddeserializer.reportunknownproperty(stddeserializer.java:673) @ org.codehaus.jackson.map.deser.std.stddeserializer.handleunknownproperty(stddeserializer.java:659) @ org.codehaus.jackson.map.deser.beandeserializer.handleunknownproperty(beandeserializer.java:1365) @ org.codehaus.jackson.map.deser.beandeserializer._handleunknown(beandeserializer.java:725) @ org.codehaus.jackson.map.deser.beandeserializer.deserializefromobject(beandeserializer.java:703) @ org.codehaus.jackson.map.deser.beandeserializer.deserialize(beandeserializer.java:580) @ org.codehaus.jackson.map.objectmapper._readmapandclose(objectmapper.java:2732) @ org.codehaus.jackson.map.objectmapper.readvalue(objectmapper.java:1863) @ com.kilo.specialobjecthandler.fromstring(specialobjecthandler.java:34)
my question is there way can have objectmapper (org.codehaus.jackson.map.objectmapper) honor annotations mixin had configured deal name , date? feel free point out elementary may have overlooked. in advance!
it problem configuration. mixin set on serialization config , not on deserialization config causing issue. setting on both configs solves problem.
Comments
Post a Comment