在我的基于Jersey的REST Web服务中,我需要提供xml和json输出。类结果有一个地图,用XmlJavaTypeAdapter注释,以正确地将其序列化为xml。
@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和XmlJavaTypeAdapter注释,json输出看起来像我想要的那样,但是xml序列化失败了。有解决方法吗?
答案 0 :(得分: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;
}
}