我正在尝试在基于Resteasy的Web应用程序中启用JAXB注释支持,并向我建议了本文(http://wiki.fasterxml.com/jacksonjaxbannotations)。我能够得到杰克逊 - XC.Jar,但我看不到如何注册注释内外。目前,ResteAsy会自动序列化我的JSON响应,以下是在哪里?当前,ResteAsy会自动序列json对象。

包括包含org.codehaus.jackson.xc.jaxbannotationintrospector寄存器的Jackson-XC Jar

    ObjectMapper mapper = new ObjectMapper();
    AnnotationIntrospector introspector = new JaxbAnnotationIntrospector();
    // make deserializer use JAXB annotations (only)
    mapper.getDeserializationConfig().setAnnotationIntrospector(introspector);
    // make serializer use JAXB annotations (only)
    mapper.getSerializationConfig().setAnnotationIntrospector(introspector);
有帮助吗?

解决方案

您需要弄清楚的是如何使您配置的ResteAsy使用对象模型。 JAX-RS提供了通过提供商来执行此操作的通用方法,但是可能有更简单的方法可以使用Resteasy进行此操作。默认情况下,一些JAX-RS实现还会注册JAXB注释Introspector。

最后一件事:您确定需要使用JAXB注释吗?尽管杰克逊可以使用它们,但最好的方法是只需使用基本的命名约定即可进行发现,而在需要覆盖的情况下,杰克逊自己的注释。 JAXB的问题是它是XML特异性的,因此与JSON一起使用时几乎没有阻碍。

其他提示

感谢您的答复,我会看看您的建议...

我们要坚持JAXB注释的原因是@xmlrootelement(name =“ userresponse”)注释允许我们在JSON响应中想要的额外包装元素。请参阅下面的示例:

我们想拥有{“响应”:{”Userresponse“:[{“ user”:{“ businessRegion”:“ us”,“ firstName”:“ joe”,“ language”:“ en'”,“ lastName”:“ smith”}}}]},而不是杰克逊当前输出,{“响应”:[{“ user”:{“ businessRegion”:“ us”,“ firstName”:“ joe”,“ language”:“ en'':“ en”,“ lastName”:“ smith”}}}]}。无论如何,是否可以在杰克逊中模仿@xmlrootelement,而没有添加其他包装器?

用户类:@xmlaccessortype(xmlaccesstype.field)@xmlrootelement(name =“ userresponse”)public class userresponse扩展了avtractresponse avtractresponse {private用户用户;

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top