我正在尝试创建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配置???
答案 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>