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

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -