使用JACKSON的JAXB到JSON

use*_*746 5 java spring json jaxb

在我的应用程序中,JAXB输出生成如下:

this.marshalOut(jaxb_Object, fileOutputStream);

这是对生成XML文件的spring Object XML Mapping Marshallers的方法调用.现在,我也喜欢在这一行之后生成JSON文件.任何人都有关于使用JAXB输入生成JSON输出的想法.

我在网上找到了这个示例代码:

ObjectMapper mapper = new ObjectMapper();
AnnotationIntrospector introspector = new JacksonAnnotationIntrospector();
// make deserializer use JAXB annotations (only)
mapper.getDeserializationConfig().setAnnotationIntrospector(introspector);
// make serializer use JAXB annotations (only)
mapper.getSerializationConfig().setAnnotationIntrospector(introspector);
mapper.writeValue( outputStream, jaxb_object);
Run Code Online (Sandbox Code Playgroud)

setAnnotationIntrospector已过时,是否有解决这个问题的任何其他方式?

Mic*_*off 5

以下工作(并且不使用任何已弃用的构造函数):

ObjectMapper mapper = new ObjectMapper();

AnnotationIntrospector introspector =
    new JaxbAnnotationIntrospector(mapper.getTypeFactory());   

mapper.setAnnotationIntrospector(introspector);
Run Code Online (Sandbox Code Playgroud)

具体来说,这一行

new JaxbAnnotationIntrospector(mapper.getTypeFactory());
Run Code Online (Sandbox Code Playgroud)

使用不推荐的构造函数.我已经测试了它并成功处理了JAXB Annotations(例如@XmlTransient,在我的例子中).


pos*_*def 0

根据 Jackson javadoc:

setAnnotationIntrospector

@Deprecated
public final void setAnnotationIntrospector(AnnotationIntrospector ai)

    Deprecated. Since 1.8, use either withAnnotationIntrospector(AnnotationIntrospector) or Module API instead

    Method for replacing existing annotation introspector(s) with specified introspector. Since this method modifies state of configuration object directly, its use is not recommended
Run Code Online (Sandbox Code Playgroud)

您是否检查过该方法withAnnotationIntrospector(AnnotationIntrospector ai)以了解它对您的情况是否有用?