开发者

How to configure json format when using jaxb annotations with jersey

I am using jersey to expose a service which uses jaxb annotated classes to configure the look of the json.

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

import org.codehaus.j开发者_C百科ackson.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 being picked up.

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 is making no difference. The format of the json is unaffected.

As far as I can tell the problem stems from the fact that jersey is not using jackson to serialize? or that jersey is ignoring my jackson configuration overrides...


I don't know why your code isn't 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 );
    }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜