如何在使用带jersey的jaxb注释时配置json格式

Mic*_*les 4 jaxb jersey jackson

我使用jersey来公开一个使用jaxb注释类来配置json外观的服务.

我试图在每个json元素中包含type指令.我通过提供提供商这样做:

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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

这个提供商肯定会被接受.

10 May 2011 3:53:18 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Provider classes found:
  class com.afrozaar.cms.service.CmsContextResolver
Run Code Online (Sandbox Code Playgroud)

但它没有任何区别.json的格式不受影响.

据我所知,问题源于球衣不使用杰克逊序列化的事实?或者那个球衣忽略了我的杰克逊配置覆盖......

Mik*_*zak 6

我不知道为什么你的代码不起作用,但这是我使用的:

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 );
    }
Run Code Online (Sandbox Code Playgroud)