2016-06-25 53 views
0

我正在嘗試創建spring restful webservice應用程序。 我需要設計服務,它將同時返回json和xml。目前默認情況下json是作爲響應返回的,但我也想返回xml。Spring Rest服務不適用於XML響應

如果我打:http://localhost:8087/RestServices/rest/profile/ 或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

commons- logging-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。罐子

傑克遜 - 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

春天-context支撐-4.0.0.RELEASE.jar

彈簧芯4.0.0.RELEASE.jar

彈簧數據公地1.6.3.RELEASE.jar

彈簧數據JPA-1.4.1 .RELEASE.jar

彈簧表達-4.0.0.RELEASE.jar

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

彈簧儀器4.0.0.RELEASE。罐子

彈簧儀器Tomcat的4.0.0.RELEASE.jar

彈簧JDBC-4.0.0.RELEASE.jar

彈簧-JDBC。罐子

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

迄今爲止嘗試作爲上文所強調的,我試圖通過接受應用程序/ XML多個傑克遜罐子,我試過製作=「應用程序/ xml」 但沒有奏效。 請讓我知道我在上面的配置中丟失了什麼。它是罐子或一些註釋或XML配置?

+0

缺少一些豆配置添加此配置。 –

+0

@RomanC你可以具體嗎?你究竟是什麼意思? – user18181818

+0

你爲什麼使用'annotation:driven'? –

回答

0

您需要告訴spring,控制器方法可以產生JSON和XML。 這是使用:

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

比spring會接受一個XML請求。

+0

我已經試過了,正如問題中提到的,但沒有運氣。在上面的代碼中發現有什麼錯誤嗎? – user18181818

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>