春季 MVC 3:通过@ResponseBody返回 XML

2022-09-01 21:59:23

请原谅我发布这个新手问题,但我已经调试这个问题很长一段时间了。我在尝试获取基于对象返回XML的响应时遇到了一个小问题:-

@RequestMapping(value = "/mylink", method = RequestMethod.GET)
public @ResponseBody SomeObject doIt() {
    ...
}

现在,即使调用了该 API,我的客户端也根本没有收到 XML 响应。我一直在阅读一些地方,似乎我需要配置XML编组程序或某种XML解析器,但我不确定如何将该部分集成到我现有的配置中。我目前在我的 servlet 中具有以下配置.xml:-

<context:component-scan base-package="ss.controller" />

<mvc:annotation-driven />

<mvc:resources location="/resources/" mapping="/resources/**" />

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/app/" />
    <property name="suffix" value=".jsp" />
</bean>

有人可以发布一些示例配置,说明我如何配置我的servlet.xml来使它工作吗?非常感谢。


答案 1

这可以通过在Spring上下文中添加以下魔术来完成(请参阅文档):

<mvc:annotation-driven/>

除其他事项外,它还提供:

支持读取和写入 XML,如果类路径上存在 JAXB。

如果检测到 JAXB(即,如果您使用的是 Java6,或者您的类路径上有一些 JAXB 实现),这将向上下文注册 a,并提供从 -annotated 方法的返回值中吐出 XML 的功能。Jaxb2RootElementHttpMessageConverter@ResponseBody

注意:您的问题排序建议使用 a 来呈现 XML,但这不是必需的。注记旨在完全绕过视图图层。ViewResolver@ResponseBody


答案 2

我用Spring 3 mvc解决了这个问题,没有编组View

@RequestMapping(value = "actionName.xml", method = RequestMethod.GET)
public HttpEntity<byte[]> getXml(ModelMap map, HttpServletResponse response) {

    String xml = generateSomeXml();

    byte[] documentBody = xml.getBytes();

    HttpHeaders header = new HttpHeaders();
    header.setContentType(new MediaType("application", "xml"));
    header.setContentLength(documentBody.length);
    return new HttpEntity<byte[]>(documentBody, header);
}

就这样。问候


推荐