2011-11-03 54 views
3

在我的基於Jersey的REST web服務中,我需要提供xml和json輸出。類結果有一個映射,用XmlJavaTypeAdapter註釋以正確地將其序列化爲xml。Jersey中的JSON序列化 - 如何忽略XmlJavaTypeAdapter以序列化映射?

@XmlRootElement 
public class Result { 

    private Map<String,Integer> results = new HashMap<String, Integer>(); 

    public Result(){} 

    @XmlJavaTypeAdapter(ResultMapAdapter.class) 
    public Map<String,SearchResult> getResults() { 
     return results; 
    } 
} 

XML輸出看起來像:

<results> 
    <result><name>Key1</name><value>Value1</value> 
    <result><name>Key2</name><value>Value2</value> 
</results> 

而且JSON輸出看起來像

"result":[{ 
    "name": "Key1", 
    "value": Value1 
    },{ 
    "name": "Key2", 
    "value": Value2 
    }] 

但我想,它看起來像:

"result":{ 
    "Key1": Value1, 
    "Key2": Value2 
    } 

如果我刪除XMlRootElement和XmlJa vaTypeAdapter註解,json輸出看起來像我想要的,但是然後xml序列化失敗。有沒有解決方法?

回答

0

一個可能的解決方案是使用自定義ObjectMapperProvider。以下提供程序不會爲json和xml創建組合映射器。所以json序列化不使用xml annoatation。

當然這種溶膠的缺點

@Provider 
public class ObjectMapperProvider implements ContextResolver<ObjectMapper> { 

    final ObjectMapper defaultObjectMapper; 

    public ObjectMapperProvider() { 
     defaultObjectMapper = createDefaultMapper(); 
    } 

    @Override 
    public ObjectMapper getContext(Class<?> type) { 

     return defaultObjectMapper; 
    } 


    private static ObjectMapper createDefaultMapper() { 

     ObjectMapper result = new ObjectMapper(); 
     result.configure(Feature.INDENT_OUTPUT, true); 

     return result; 
    } 
} 
相關問題