Spring Rest Service不支持XML响应

时间:2016-06-25 09:23:58

标签: spring web-services rest spring-mvc jaxb

我正在尝试创建spring restful webservice应用程序。 我需要设计服务,它将返回json和xml。目前默认情况下,json作为响应返回,但我也想返回xml。

如果我点击: http://localhost:8087/RestServices/rest/profile/ 233 或233 .json

>> 我按预期获得了json响应

但如果点击: http://localhost:8087/RestServices/rest/profile/ 233.xml

>> 我收到错误消息 HTTP状态 - 406 此请求标识的资源只能根据请求生成具有不可接受特征的响应“接受“标题。

技术详情: 春天4.0 Hibernate 4.0 Spring MVC。 RestController。

依赖/罐子详细信息:

ANTLR-2.7.7.jar

aopalliance-1.0.jar

com.mysql.jdbc_5.1.5.jar

共享记录-1.2.jar

DOM4J-1.6.1.jar

冬眠-公地注解-4.0.5.Final.jar

冬眠核-4.3.6.Final.jar

冬眠-的EntityManager-4.3.6.Final.jar

冬眠-JPA-2.1-API-1.0.0.Final.jar

冬眠验证器-4.2.0.Final.jar

杰克逊 - 注解-2.4.1.jar

杰克逊 - 芯 - 2.4.4.jar

杰克逊核-ASL-1.9.0.jar

杰克逊 - 数据绑定-2.4.4.jar

杰克逊 - DATAFORMAT-XML的2.5.0.jar

杰克逊 - JAXRS-1.9.2.jar

杰克逊映射器-ASL-1.9.0.jar

杰克逊-XC-1.9.2.jar

jandex-1.1.0.Final.jar

了Javassist-3.18.1-GA.jar

JAXB-API-2.2.jar

的JBoss-测井3.1.3.GA.jar

的JBoss测井的注解-1.2.0.Beta1.jar

的JBoss事务-api_1.2_spec-1.0.0.Final.jar

的log4j-1.2.17.jar

的logback经典-0.9.jar

的logback核-0.9.6.jar

servlet的api.jar文件

SLF4J-API-1.6.1.jar

SLF4J-log4j13-1.0.1.jar

slf4j.jar

弹簧AOP-4.0.0.RELEASE.jar

弹簧方面-4.0.0.RELEASE.jar

弹簧豆-4.0.0.RELEASE.jar

弹簧积聚SRC-4.0.0.RELEASE.jar

弹簧上下文4.0.0.RELEASE.jar

弹簧上下文支持-4.0.0.RELEASE.jar

弹簧芯4.0.0.RELEASE.jar

弹簧数据公地1.6.3.RELEASE.jar

弹簧 - 数据 - JP-A-1.4.1.RELEASE.jar

弹簧表达-4.0.0.RELEASE.jar

弹簧框架-BOM-4.0.0.RELEASE.jar

弹簧仪器4.0.0.RELEASE.jar

弹簧仪器Tomcat的4.0.0.RELEASE.jar

弹簧JDBC-4.0.0.RELEASE.jar

弹簧了jdbc.jar

弹簧JMS-4.0.0.RELEASE.jar

弹簧消息传递4.0.0.RELEASE.jar

弹簧ORM-4.0.0.RELEASE.jar

弹簧OXM-4.0.0.RELEASE.jar

弹簧 - 测试 - 4.0.0.RELEASE.jar

弹簧-TX-4.0.0.RELEASE.jar

弹簧网络4.0.0.RELEASE.jar

弹簧webmvc-4.0.0.RELEASE.jar

弹簧webmvc的portlet-4.0.0.RELEASE.jar

弹簧的WebSocket-4.0.0.RELEASE.jar

woodstox核-ASL-4.2.0.jar

DateRestController.java

@RestController
@RequestMapping("/rest")
public class DataRestController
{
    @RequestMapping(value = "/profile/{number}", method = 
     RequestMethod.GET)  
     public 
     List<CustomerProfile>getCustomerProfile(@PathVariable("number")   
     String number) 
     {

        return profileList;
     }
}

ProfileModel.java

@XmlRootElement(name="profile")
@Entity
@Table(name = "profile")
public class Profile extends CommonBean
{
    @Column(name = "email")
    private String email;

    @Column(name = "mobile")
    private String mobile;

    @Column(name = "DOB")
    private Date dateOfBirth;


    @XmlElement
    public String getEmail()
    {
        return email;
    }

    public void setEmail(String email)
    {
       this.email = email;
    }

    public String getMobile()
    {
       return mobile;
    }

    public void setMobile(String mobile)
    {
      this.mobile = mobile;
    }

    public Date getDateOfBirth()
    {
      return dateOfBirth;
    }

    public void setDateOfBirth(Date dateOfBirth)
    {
       this.dateOfBirth = dateOfBirth;
    }
}

控制器servlet.xml中

<beans>

<context:component-scan base-package="com.test" />



<mvc:annotation-driven />

<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
    <value>/pages/</value>
</property>
<property name="suffix">
    <value>.jsp</value>
</property>`enter code here`
</bean>
</beans>

到目前为止尝试过多个jackson jar如上所示,我尝试传递accept application / xml,我试过生成=“application / xml” 但没有任何效果。 请告诉我上述配置中缺少的内容。它是罐子或一些注释或xml配置???

2 个答案:

答案 0 :(得分:0)

你需要告诉spring,控制器方法可以生成JSON和XML。 这是使用:

完成的
@RequestMapping(... produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE})

比spring更接受XML请求。

答案 1 :(得分:0)

在您的调度程序中添加此配置

<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>