Java Spring REST XML服务不接受XML为;接受;标题
我定义了几个REST服务,它们当前将JSON格式的对象作为服务响应体返回。我试图让这个服务也接受XML作为一个新的需求,尽管它不接受这一点 我遵循的是,并且设置了几乎相同的Java Spring REST XML服务不接受XML为;接受;标题,java,spring,spring-mvc,Java,Spring,Spring Mvc,我定义了几个REST服务,它们当前将JSON格式的对象作为服务响应体返回。我试图让这个服务也接受XML作为一个新的需求,尽管它不接受这一点 我遵循的是,并且设置了几乎相同的pom.xml依赖项,我的服务定义同样非常简单 @Controller @RequestMapping(value = "api/sales/*") public class SalesController { @RequestMapping(value = "/countries", method = Reques
pom.xml
依赖项,我的服务定义同样非常简单
@Controller
@RequestMapping(value = "api/sales/*")
public class SalesController {
@RequestMapping(value = "/countries", method = RequestMethod.GET)
@ResponseBody
public List<NamedEntity> getCountries() {
将@products(“application/xml”)添加到getCountries()将@products(“application/xml”)添加到getCountries()中
检查请求头,客户端需要在头中有“application/xml”,而不是“application/json”
说到这里,请确保您已经为您的对象注册了适当的消息转换器。如果您使用的是Java6,那么Spring将自动检测类路径中的JAXB,或者您可以手动添加转换器
检查请求头,客户端需要在头中有“application/xml”,而不是“application/json”
说到这里,请确保您已经为您的对象注册了适当的消息转换器。如果您使用的是Java6,那么Spring将自动检测类路径中的JAXB,或者您可以手动添加转换器 您需要发送“application/xml”,而不是“application/application+xml”。同时考虑使用:
@RequestMapping(value = "/countries", method = RequestMethod.GET, produces={"application/json", "application/xml"})
这将确保您的方法仅响应这些媒体类型,并拒绝使用406 HTTP状态代码的其他媒体。您需要发送“应用程序/xml”,而不是“应用程序/application+xml”。同时考虑使用:
@RequestMapping(value = "/countries", method = RequestMethod.GET, produces={"application/json", "application/xml"})
这将确保您的方法仅响应这些媒体类型,并拒绝使用406 HTTP状态代码的其他媒体。尝试此dispatcher 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>
com.fasterxml.jackson.core
杰克逊核心
2.4.3
com.fasterxml.jackson.core
杰克逊数据绑定
2.4.3
com.fasterxml.jackson.core
杰克逊注释
2.4.3
com.fasterxml.jackson.dataformat
jackson数据格式xml
2.4.3
尝试此dispatcher 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>
com.fasterxml.jackson.core
杰克逊核心
2.4.3
com.fasterxml.jackson.core
杰克逊数据绑定
2.4.3
com.fasterxml.jackson.core
杰克逊注释
2.4.3
com.fasterxml.jackson.dataformat
jackson数据格式xml
2.4.3
这似乎不起作用,提到的示例也没有此注释,我将更新帖子以显示spring中的示例控制器。这似乎不起作用,提到的示例也没有此注释,我将更新我的帖子,展示spring中的示例控制器。客户端确实有正确的accepts子句application/application+xml
,我使用的是JDK7,但经过重构,切换回JDK6,但仍然无法工作。我还将jaxb添加到我的POM中,但运气不好,我的curl调用行是'curl-H“Accept:application/application+xml”-X GET'`它使用相同的Accept
对spring示例项目很有效。客户端确实有正确的accepts子句application/application+xml
,我使用的是JDK7,但经过重构,切换回JDK6,但仍然无法工作。我还将jaxb添加到我的POM中,但运气不好,我的curl调用行是'curl-H“Accept:application/application+xml”-X GET'`,它使用相同的Accept
来处理spring示例项目。