Spring MVC 3.2:使用@Responsebody返回Document(xml)

时间:2014-08-28 14:30:40

标签: java xml spring spring-mvc

我是Spring MVC的新手,我有一个通常返回org.w3c.dom.Document对象(XML文档)的应用程序。这些文档有很多不同的(和动态的)结构(没有特定的xsd)。我需要知道如何从控制器返回此对象。 e.g。

@RequestMapping(method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
@ResponseBody
public Document createFOO(Document myDoc){

 return myDoc;
}

当我尝试这个时,我得到HTTP 406错误,显然我需要一个配置,但我找不到解决我的问题的文档,因为在所有这些解决方案包括类和XML之间的映射,但在我的情况下,该对象已经是一个XML Doc。你能给我一个指导我的调查吗?

谢谢!

马科斯

编辑:这是我的配置文件:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <context:component-scan base-package="my.files"/>
    <mvc:annotation-driven/>

</beans>

我的示例课程:

@Controller
@RequestMapping("blabla")

public class MyClass{

...

    @RequestMapping(method = RequestMethod.POST, produces = "application/xml")
    @ResponseStatus(HttpStatus.CREATED)
    @ResponseBody
    public Document myMethod(...) {

        Document responseDoc = foo.giveMeaDocument();
    }
}

1 个答案:

答案 0 :(得分:1)

HTTP / 406错误是由于文档对象无法映射到响应主体这一事实。

您需要确保使用&lt; mvc:annotation-driven /&gt;在您的XML配置或JavaConfig样式下的类似构造中。

修改

我已经实现了一个快速且非常脏的应用程序来演示我在说什么:

https://github.com/djgraff209/domconversion

看看它是否符合您的需求 - 请注意它非常粗糙,只是为了展示技术。