代码为JacksonJaxbJsonProvider的@XMLElementWrapper问题

时间:2017-01-31 13:17:42

标签: java json serialization jaxb jackson

我正在尝试为

获取正确的JSON
public class MyTestResponse {
    @XmlElementWrapper(name = "data")
    @XmlElement(name = "values")
    public List<String> test = Arrays.asList("Sidney");
}

我现在得到了

"data": [
  "Sidney"
],

而不是

"data":{
    "values": [
        "Sidney"
    ]
},

我在ServiceMix 7 M3中使用org.codehaus.jackson stack(1.9.0)。

我的JSON提供程序扩展了org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider:

import org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider;
import org.codehaus.jackson.map.AnnotationIntrospector;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;
import org.codehaus.jackson.map.introspect.JacksonAnnotationIntrospector;
import org.codehaus.jackson.xc.JaxbAnnotationIntrospector;


public class MyJsonProvider extends JacksonJaxbJsonProvider {

    public JsonProvider() {
        super();
        ObjectMapper mapper = new ObjectMapper();
        AnnotationIntrospector primary = new JaxbAnnotationIntrospector();
        AnnotationIntrospector secondary = new JacksonAnnotationIntrospector();
        AnnotationIntrospector pair = new AnnotationIntrospector.Pair(secondary, primary);
        mapper.getDeserializationConfig().setAnnotationIntrospector(pair);
        mapper.getSerializationConfig().setAnnotationIntrospector(pair);
        this.setMapper(mapper);
    }

}

如何告诉JacksonJaxbJsonProvider不要替换XmlElement名称,而是将其包裹起来?

1 个答案:

答案 0 :(得分:0)

正如您所发现的,JSON编组不支持JAXB注释。在jackson ObjectMapper(您的实例名为mapper)

上启用以下MapperFeature
mapper.enable(MapperFeature.USE_WRAPPER_NAME_AS_PROPERTY_NAME);