java - Naming a json property after a variable value -
i using jackson provider rest service:
<jaxrs:server id="services" address="/"> <jaxrs:servicebeans> <bean class="..."/> </jaxrs:servicebeans> <jaxrs:providers> <bean class="org.codehaus.jackson.jaxrs.jacksonjsonprovider" /> </jaxrs:providers> </jaxrs:server>
i have class:
public class response { private date mydate; private dataobject data; //data related date }
and method returning json:
@produces("application/json") public response getresp(){ response r = ... return r; }
this translates in following json object
{ "mydate":"20150730", "data":{ "p1":"v1", "p2":"v2" } }
is possible obtain this, instead:
"20150730":{ "p1":"v1", "p2":"v2" }
in other words have mydate content actual json property , data content json value?
you write own serializer. example
import java.io.ioexception; import java.text.simpledateformat; import org.codehaus.jackson.jsongenerator; import org.codehaus.jackson.jsonprocessingexception; import org.codehaus.jackson.map.jsonserializer; import org.codehaus.jackson.map.serializerprovider; public class responseserializer extends jsonserializer<response> { @override public void serialize(response resp, jsongenerator jg, serializerprovider sp) throws ioexception, jsonprocessingexception { jg.writestartobject(); string datestring = new simpledateformat("yyyymmdd").format(resp.mydate); jg.writeobjectfield(datestring, resp.data); jg.writeendobject(); } }
i don't know date
object is. assumed java.util.date
created formatter. serializer add date string key , objectdata
, value.
then need register serializer objectmapper
. can in contextresolver
(which jax-rs way configure mapper)
@provider public class objectmappercontextresolver implements contextresolver<objectmapper>{ private final objectmapper mapper; public objectmappercontextresolver() { mapper = new objectmapper(); simplemodule module = new simplemodule( "responsemodule", new version(1, 0, 0, null) ); module.addserializer(response.class, new responseserializer()); mapper.registermodule(module); } @override public objectmapper getcontext(class<?> type) { return mapper; } }
then register objectmappercontextresolver
other provider in xml config.
Comments
Post a Comment