Spring @XmlSee也是继承

Spring @XmlSee也是继承,spring,jaxb,Spring,Jaxb,首先,我是JAXB和Spring领域的新手,因此如果我错过了一些非常明显的东西,如果有人能指出而不是不回答,我会非常感激我试图在这里寻找解决方案,但找不到好的答案 我有一堆子类DTO(比如A1、A2、A3),它们继承自同一个抽象类a。我希望rest查询的结果返回子类类型的列表。我用下面的类来表示结果 @XmlRootElement(name="result") @XmlSeeAlso({A1.class, A2.class, A3.class}) public class AResult<

首先,我是JAXB和Spring领域的新手,因此如果我错过了一些非常明显的东西,如果有人能指出而不是不回答,我会非常感激我试图在这里寻找解决方案,但找不到好的答案

我有一堆子类DTO(比如A1、A2、A3),它们继承自同一个抽象类a。我希望rest查询的结果返回子类类型的列表。我用下面的类来表示结果

@XmlRootElement(name="result")
@XmlSeeAlso({A1.class, A2.class, A3.class})
public class AResult<T> 
{
...
}
但从我在这个网站和其他地方所做的研究来看,我认为JAXB不可能做到这一点

  • 因为我们在配置中使用注释驱动的标记,所以它会自动使用Jaxb2RootElementHttpMessageConverter类。此消息转换器使用@xmlsee中定义的类创建JaxbContext。createMarshaller和getContext方法在超类中是不可变的

  • 由于第1点的原因,我无法编写一个可以检查类是否是类a的子类然后将其添加到JaxbContext的类。我不能使用自定义Jaxb2RootElementHttpMessageConverter或自定义封送拆收器

  • 我该怎么做?顺便说一句,我们使用的是Spring版本3.1.3


    感谢您的帮助。

    JAXB不会扫描您的类路径,以查找可能恰好是
    AResult
    的子类的类(这将相当慢!),而是依赖于了解它可能必须创建实例的所有类。
    @xmlseea
    注释所做的就是使用列出的其他类扩展上下文


    然而,还有许多其他方法。例如,您可以创建一个标记为的类,该类知道如何生成您关心的子类。或者你可以尝试使用。唉,我只在我自己的代码中使用了基于
    @xmlseea
    的方法,所以我无法根据经验进行评论。

    谢谢你的帮助Donal。我是这样绕过这个问题的:1。创建扩展HttpMessageConverter的CustomJaxb2RootElementMessageConverter。2.在我的自定义类中,将上下文作为路径传递,并在这些包中包含jaxb.index文件。3.将AnnotationMethodHandlerAdapter和RequestMappingHandlerAdapter的messageConverters更改为使用我的自定义类。
    @XmlSeeAlso({(subclasses of A.class})