我正在尝试在基于RESTEasy的Web应用程序中启用JAXB注释支持,并且向我建议了这篇文章(http://wiki.fasterxml.com/JacksonJAXBAnnotations)。我能够得到jackson-xc.jar,但是我没有看到如何注册注释内部跟踪器。目前,RESTEasy会自动序列化我的JSON响应,以下哪个适合?目前,RESTeasy自动序列化JSON对象。
包含jackson-xc jar,其中包含org.codehaus.jackson.xc.JaxbAnnotationIntrospector 注册此注释introspector
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);
答案 0 :(得分:2)
您需要弄清楚如何使RESTeasy使用您已配置的ObjectMapper。 JAX-RS提供了通过提供程序执行此操作的通用方法,但使用RESTeasy可能有更简单的方法。 默认情况下,一些JAX-RS实现还注册JAXB注释introspector。
最后一件事:您确定需要使用JAXB注释吗?虽然杰克逊可以使用它们,但最好的方法是在需要覆盖的情况下,只使用基本命名约定进行发现,使用杰克逊自己的注释。 JAXB的问题在于它是特定于xml的,因此与JSON一起使用时几乎没有阻抗。
答案 1 :(得分:1)
感谢您的回复,我会看看您的建议......
我们想要坚持使用jaxb注释的原因是@XmlRootElement(name =“userResponse”)注释允许我们在JSON响应中使用额外的包装元素。见下面的例子:
我们希望{“响应”:{“ userResponse ”:[{“user”:{“businessRegion”:“US”,“firstName”:“joe”,“language” :“en”,“lastName”:“smith”}}}}}}而不是Jackson目前输出的内容,{“response”:[{“user”:{“businessRegion”:“US”,“firstName”:“joe ”, “语言”: “恩”, “姓氏”: “史密斯”}}]}。有没有在没有添加额外包装类的情况下模仿Jackson中的@XmlRootElement?
用户类: @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(名称= “userResponse”) 公共类UserResponse扩展AbstractResponse { 私人用户;