406不可接受的弹簧支架WS

时间:2014-07-27 08:45:33

标签: spring maven spring-mvc

我正在编写一个Spring rest WS来将响应作为XML返回。下面是我的类和pom文件。

我在执行服务时遇到Http 406错误,如下所示:

 http://localhost:8080/SpringRestExample/rest/emp/dummy.xml

但是,我在执行

时收到了JSON响应
http://localhost:8080/SpringRestExample/rest/emp/dummy.json 

请告知

的pom.xml

    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>${jackson.version}</version>
    </dependency>   

EmployeeController:

@RequestMapping(value = "/rest/emp/dummy", method = RequestMethod.GET,produces={"application/xml"})
public @ResponseBody Employee getDummyEmployeeXML() {
    logger.info("Start getDummyEmployee");
    Employee emp = new Employee();
    emp.setId(9999);
    emp.setName("Dummy");
    emp.setCreatedDate(new Date());
    empData.put(9999, emp);
    return emp;
}

APP-context.xml中

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
    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">

<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->

<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />

<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />

<context:component-scan base-package="com.skanda.spring.controller" />

  <beans:bean id="contentNegotiationManager"
         class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<beans:property name="favorPathExtension" value="true" />
<beans:property name="favorParameter" value="true" />
<beans:property name="parameterName" value="mediaType" />
<beans:property name="ignoreAcceptHeader" value="true"/>
<beans:property name="useJaf" value="false"/>
<beans:property name="defaultContentType" value="application/json" />

<beans:property name="mediaTypes">
    <beans:map>
        <beans:entry key="json" value="application/json" />
        <beans:entry key="xml" value="application/xml" />
   </beans:map>
</beans:property>
</beans:bean>

     

员工:

public class Employee implements Serializable{

private static final long serialVersionUID = -7788619177798333712L;

private int id;
private String name;
private Date createdDate;

public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

@JsonSerialize(using=DateSerializer.class)
public Date getCreatedDate() {
    return createdDate;
}
public void setCreatedDate(Date createdDate) {
    this.createdDate = createdDate;
}


}

2 个答案:

答案 0 :(得分:0)

406表示服务器无法在客户端询问的内容类型中生成响应。检查HTTP请求的Accept标头,并确保它包含application / xml。

也许它包含text / xml,这就是你应该在produces注释的@RequestMapping属性中使用的内容。顺便说一下,你应该使用org.springframework.http.MediaType中的常量,而不是像你一样对字符串进行硬编码。

答案 1 :(得分:0)

对于任何类型的xml转换,您需要在Model类之上添加@XmlRootElement注释。我已完成更改并运行上面的程序并获得结果。只需在Employee类上面添加@XmlRootElement即可完成。