2011-05-10 83 views
4

我使用球衣来公开使用jaxb注释类来配置json的外观的服务。如何配置JSON格式使用jersey注解与球衣

我想在每个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; 
     } 
    } 

而且这个提供商肯定会被接受。

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

但它没有区别。 json的格式不受影响。

据我可以告诉问题源于球衣不使用杰克逊序列化的事实?或者球衣无视我的杰克逊配置将覆盖...

回答

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); 
    } 
+0

感谢,正想回答我自己问题,但你救了我麻烦。这就是我所做的:-),配置了我自己的jackson-json提供程序。 – 2011-05-13 07:00:00

+0

我和Jersey2.4和Jackson 2.2.3的OP一样有问题 - 我无法让运行时识别自定义对象映射器...我发现每个解决方案都是使用Spring MVC - 我不是 - - 除了这个。 – 2013-10-26 18:37:37

+0

我一直把我的头撞在墙上,直到找到你的解决方案。谢谢。 – limc 2014-05-17 14:38:41