2011-05-10 57 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