How to configure json format when using jaxb annotations with jersey

I use jersey to open a service that uses jaxb annotated classes to customize the look of json.

I am trying to include a type directive in every json element. I do this by providing the Provider as such:

import org.codehaus.jackson.JsonParser.Feature; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.ObjectMapper.DefaultTyping; @Provider @Produces(MediaType.APPLICATION_JSON) public class CmsContextResolver implements ContextResolver<ObjectMapper> { ObjectMapper mapper; public CmsContextResolver() { mapper = new ObjectMapper(); // @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = // JsonTypeInfo.As.WRAPPER_OBJECT, property = "@type") mapper.configure(Feature.INTERN_FIELD_NAMES, true); mapper.enableDefaultTypingAsProperty(DefaultTyping.NON_FINAL, "@type"); } @Override public ObjectMapper getContext(Class<?> arg0) { return mapper; } } 

And this provider is definitely matched.

 10 May 2011 3:53:18 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses INFO: Provider classes found: class com.afrozaar.cms.service.CmsContextResolver 

But it does not matter. The json format does not change.

As far as I can tell, the problem is that Jersey doesn't use Jackson for serialization? or that jersey ignores my jackson configuration settings ...

+4
source share
1 answer

I don't know why your code is not working, but this is what I use:

 import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.ext.Provider; import org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider; @Provider @Produces(MediaType.APPLICATION_JSON) public class JsonProvider extends JacksonJaxbJsonProvider { public JsonProvider() { super(); setMapper( myConfiguredObjectMapper ); } 
+6
source

All Articles