3

我正在尝试在基于 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);
4

2 回答 2

2

你需要弄清楚的是如何让 RESTeasy 使用你已经配置好的 ObjectMapper。JAX-RS 提供了通过提供程序执行此操作的通用方法,但使用 RESTeasy 可能有更简单的方法来执行此操作。默认情况下,一些 JAX-RS 实现还注册 JAXB 注释自省器。

最后一件事:您确定需要使用 JAXB 注释吗?虽然 Jackson 可以使用它们,但最好的方法是在需要覆盖的情况下仅使用基本命名约定进行发现和 jackson 自己的注释。JAXB 的问题在于它是特定于 xml 的,因此与 JSON 一起使用时会有一点阻抗。

于 2011-01-19T17:53:37.810 回答
1

谢谢你的回复,我会看看你的建议...

我们要坚持使用 jaxb 注释的原因是 @XmlRootElement(name="userResponse") 注释允许我们在 JSON 响应中需要的额外包装元素。请参见下面的示例:

我们希望有 {"response":{" userResponse ":[{"user":{"businessRegion":"US","firstName":"joe","language":"en","lastName":" smith"}}}]} 而不是 Jackson 当前输出的内容,{"response":[{"user":{"businessRegion":"US","firstName":"joe","language":"en", “姓氏”:“史密斯”}}]}。无论如何在不添加额外包装类的情况下模仿杰克逊中的@XmlRootElement 吗?

用户类:@XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name="userResponse") public class UserResponse extends AbstractResponse{ private Users user;

于 2011-01-19T21:35:49.687 回答