JavaSpringMVC3:通过@ResponseBy返回XML
请原谅我发布这个noob问题,但我已经调试这个问题有一段时间了。我在尝试获取基于对象返回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 楼答案
我在没有MarshallingView的情况下用Spring3MVC解决了这个问题
就这些。问候
# 2 楼答案
当我想使用spring返回对象的XML表示时,我要做的是定义一个MarshallingView,例如
注意,jaxb有一个完整的alternatives世界。 下一步是
或者,如果您想使用ResponseBody注释,它将如下所示:
注意,这需要定义一个HttpMessageConverter。请参阅spring文档,以获取有关如何执行此操作的完美示例
# 3 楼答案
将
produces = MediaType.APPLICATION_XML_VALUE
添加到RequestMapping和@XmlRootElement
添加到模型对象的顶部应该可以工作# 4 楼答案
您可能需要使用XML Marshalling View或配置^{}
这里有一个简短的Reference about using ^{} with converters
# 5 楼答案
这可以通过在Spring上下文中添加以下魔法来实现(请参见docs):
其中包括:
如果检测到JAXB(即,如果您在Java6上,或者在类路径上有一些JAXB实现),这将向上下文注册一个
Jaxb2RootElementHttpMessageConverter
,并提供从@ResponseBody
注释方法的返回值中吐出XML的能力注意:您的问题建议使用
ViewResolver
来呈现XML,但这不是必需的。@ResponseBody
注释被设计为完全绕过视图层# 6 楼答案
尝试添加
produces = MediaType.APPLICATION_XML_VALUE
,即