java - Using two JsonSerializers for single entity in Jackson -
i've found way implement own serialization method extending jsonserializer<foo>
, overriding serialize()
method , registering simplemodule
everything. here have:
@provider @produces(mediatype.application_json) public class jacksonconfig implements contextresolver<objectmapper> { @override public objectmapper getcontext(class<?> aclass) { objectmapper mapper = new objectmapper(); mapper.setserializationinclusion(jsoninclude.include.non_null); simplemodule foomodule = new simplemodule("foomodule", new version(0, 1, 0, null, "org.foo.bar", "foo")); relationshipmodule.addserializer(foo.class, new foojacksonserializer()); relationshipmodule.adddeserializer(foo.class, new foojacksondeserializer()); mapper.registermodule(foomodule); return mapper; } }
however, there way use 2 custom serialization strategies , depending on rest request (i use resteasy) choose right one? i.e. changing programmaticaly on fly, not when context set-up. i'd have concise form of foo
, verbose one.
you implement special objectmapper , manually obtain 1 need:
@provider @produces(mediatype.application_json) public class jacksonconfig implements contextresolver<objectmapper> { private objectmapper objectmapper; private specialobjectmapper specialobjectmapper; // class extending objectmapper public jacksonconfig() { objectmapper = new objectmapper(); // configuration ... specialobjectmapper = new specialobjectmapper(); // configuration module ... } @override public objectmapper getcontext(class<?> clazz) { return clazz == specialobjectmapper.class ? specialobjectmapper : objectmapper; } }
in resource class:
@context private providers providers; public string get() { contextresolver<objectmapper> contextresolver = providers.getcontextresolver(objectmapper.class, mediatype.application_json_type); objectmapper mapper = somecondition ? contextresolver.getcontext(specialobjectmapper.class) : contextresolver.getcontext(objectmapper.class); return mapper.writevalueasstring(value); }
i don't know goal maybe can achieve jackson's json views or define custom mediatype application/vnd.com.foo.bar.foo+json
, register serializer type.
Comments
Post a Comment