题
我正在尝试在基于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用户用户;