Spring Rest Service 不适用于 XML 响应
Posted
技术标签:
【中文标题】Spring Rest Service 不适用于 XML 响应【英文标题】:Spring Rest Service not working for XML response 【发布时间】:2016-10-27 20:55:41 【问题描述】:我正在尝试创建 Spring RESTful Web 服务应用程序。 我需要设计将返回 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 休眠 4.0 春天MVC。 休息控制器。
依赖项/Jars 详细信息:
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
hibernate-commons-annotations-4.0.5.Final.jar
hibernate-core-4.3.6.Final.jar
hibernate-entitymanager-4.3.6.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
hibernate-validator-4.2.0.Final.jar
jackson-annotations-2.4.1.jar
jackson-core-2.4.4.jar
jackson-core-asl-1.9.0.jar
jackson-databind-2.4.4.jar
jackson-dataformat-xml-2.5.0.jar
jackson-jaxrs-1.9.2.jar
jackson-mapper-asl-1.9.0.jar
jackson-xc-1.9.2.jar
jandex-1.1.0.Final.jar
javassist-3.18.1-GA.jar
jaxb-api-2.2.jar
jboss-logging-3.1.3.GA.jar
jboss-logging-annotations-1.2.0.Beta1.jar
jboss-transaction-api_1.2_spec-1.0.0.Final.jar
log4j-1.2.17.jar
logback-classic-0.9.jar
logback-core-0.9.6.jar
servlet-api.jar
slf4j-api-1.6.1.jar
slf4j-log4j13-1.0.1.jar
slf4j.jar
spring-aop-4.0.0.RELEASE.jar
spring-aspects-4.0.0.RELEASE.jar
spring-beans-4.0.0.RELEASE.jar
spring-build-src-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-context-support-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-data-commons-1.6.3.RELEASE.jar
spring-data-jpa-1.4.1.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
spring-framework-bom-4.0.0.RELEASE.jar
spring-instrument-4.0.0.RELEASE.jar
spring-instrument-tomcat-4.0.0.RELEASE.jar
spring-jdbc-4.0.0.RELEASE.jar
spring-jdbc.jar
spring-jms-4.0.0.RELEASE.jar
spring-messaging-4.0.0.RELEASE.jar
spring-orm-4.0.0.RELEASE.jar
spring-oxm-4.0.0.RELEASE.jar
spring-test-4.0.0.RELEASE.jar
spring-tx-4.0.0.RELEASE.jar
spring-web-4.0.0.RELEASE.jar
spring-webmvc-4.0.0.RELEASE.jar
spring-webmvc-portlet-4.0.0.RELEASE.jar
spring-websocket-4.0.0.RELEASE.jar
woodstox-core-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;
controller-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,我尝试传递接受应用程序/xml,我尝试了 producer="application/xml" 但没有任何效果。 请让我知道我在上述配置中缺少什么。是 jars 还是一些注解或 xml 配置???
【问题讨论】:
缺少一些 bean 配置。 @RomanC 你能具体点吗???你到底是什么意思?? 你为什么使用annotation:driven
?
明确支持注解驱动的 MVC 控制器,即“@RequestMapping,@Controller”
类路径上有 jaxb 库吗?
【参考方案1】:
你需要告诉 spring 控制器方法可以生成 JSON 以及 XML。 这是使用:
@RequestMapping(... produces = MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE)
比 spring 会接受 XML 请求。
【讨论】:
我已经尝试过,但没有运气。你发现上面的代码有什么问题吗【参考方案2】:在您的调度程序中添加此配置
<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>
【讨论】:
以上是关于Spring Rest Service 不适用于 XML 响应的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security 自定义登录功能不适用于 Spring Boot 和 REST api
Java Spring REST API CORS 不适用于通过 jQuery 和 Chrome 的 DELETE 请求
Spring Data REST 自定义资源 URI 适用于 String 但不适用于 Long
IgnoreCase Finder 不适用于 Spring Data Rest 和 Neo4J
带有 Spring Security 核心和 CORS 插件的 grails REST API 不适用于 OPTIONS http 方法请求