我定义了几个REST服务,这些服务当前正在将JSON格式的对象作为服务响应主体返回。我正在尝试使这项服务也接受XML作为一项新要求,尽管它不接受这一点。
我正在关注spring-mvc-showcase sample project并且几乎完全相同地设置了pom.xml
个依赖关系,我的服务定义同样非常简单。
@Controller
@RequestMapping(value = "api/sales/*")
public class SalesController {
@RequestMapping(value = "/countries", method = RequestMethod.GET)
@ResponseBody
public List<NamedEntity> getCountries() {
NamedEntity
具有相应的@XmlRootElement
注释。
有人可以解释我需要将ResponseBody
package org.springframework.samples.mvc.messageconverters;
@Controller
@RequestMapping("messageconverters/*")
public class MessageConvertersController {
@RequestMapping(value="/xml", method=RequestMethod.GET)
public @ResponseBody JavaBean writeXml() {
return new JavaBean("bar", "fruit");
作为{{1}}使用的最基本要求。
编辑:添加了春季MVC示例。
来自spring-mvc-showcase的样本如下:
{{1}}
答案 0 :(得分:1)
检查请求标头,客户端需要在标头中有“application / xml”,而不是“application / json”
说完这些后,请确保已为您的对象注册了适当的消息转换器。如果您使用的是Java 6,那么Spring将自动检测类路径中的JAXB,否则您可以手动添加转换器。
答案 1 :(得分:0)
将@Produces(“application / xml”)添加到getCountries()
答案 2 :(得分:0)
您需要发送“application / xml”,而不是“application / application + xml”。还可以考虑使用:
@RequestMapping(value = "/countries", method = RequestMethod.GET, produces={"application/json", "application/xml"})
这可确保您的方法仅响应这些媒体类型,并使用406 HTTP状态代码拒绝其他媒体类型。
答案 3 :(得分:0)
尝试这个调度程序servlet配置。
<mvc:annotation-driven
content-negotiation-manager="contentManager" />
<bean id="contentManager"
class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="favorPathExtension" value="false" />
<property name="ignoreAcceptHeader" value="false" />
<property name="defaultContentType" value="application/json" />
<property name="useJaf" value="false" />
</bean>
和一些依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.4.3</version>
</dependency>