根据请求头accept的内容(application/xml、application/json)动态的让服务端响应xml或json数据(同理也可以通过content-type动态的进行xml或json参数请求)
1. 定义webservice服务端与实体类
@Service("cxfService")
public class TestCxfJsonXml {
@POST
@Path(value = "/person")
@Produces({ MediaType.APPLICATION_JSON ,MediaType.APPLICATION_XML})
@Consumes({ MediaType.APPLICATION_JSON })
public Person info(Person person){
System.out.println(JSON.toJSONString(person,true));
return person;
}
@Data //lombok
@XmlRootElement(name="person")
static class Person{
private String name;
private int age;
}
}
2. 通过配置将服务注册到cxf
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://cxf.apache.org/jaxrs
http://cxf.apache.org/schemas/jaxrs.xsd">
<!-- 初始化cxf servlet -->
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<!-- 日志拦截器bean,可自定义拦截器 -->
<bean id="loggingInInterceptor" class="org.apache.cxf.ext.logging.LoggingInInterceptor" />
<bean id="loggingOutInterceptor" class="org.apache.cxf.ext.logging.LoggingOutInterceptor" />
<!-- 发布方式1:使用JAXRSServerFactoryBean -->
<jaxrs:server address="/service">
<jaxrs:serviceBeans>
<ref bean="cxfService" />
</jaxrs:serviceBeans>
<!-- Provider 进行json、xml解析的实现类-->
<jaxrs:providers>
<bean class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider" />
<bean class="com.fasterxml.jackson.jaxrs.xml.JacksonXMLProvider" />
</jaxrs:providers>
<!-- 输入日志拦截器 -->
<jaxrs:inInterceptors>
<ref bean="loggingInInterceptor" />
</jaxrs:inInterceptors>
<!-- 输出日志拦截器 -->
<jaxrs:outInterceptors>
<ref bean="loggingOutInterceptor" />
</jaxrs:outInterceptors>
</jaxrs:server>
</beans>
3. pom文件引入json、xml解析实现类(其他引入省略)
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.4.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-xml-provider</artifactId>
<version>2.9.9</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-base</artifactId>
<version>2.9.9</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.9</version>
</dependency>
4. 通过HTTPClient进行json请求,json响应
HttpClient client = new HttpClient();
PostMethod post = new PostMethod(url);
RequestEntity entity = null;
client.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"UTF-8");
entity = new StringRequestEntity("{\"name\":\"tom\",\"age\":28}", "application/json", "UTF-8");
post.setRequestEntity(entity);
post.setRequestHeader("Accept","application/json");
client.executeMethod(post);
String response = post.getResponseBodyAsString();
5. 通过HTTPClient进行json请求,xml响应
HttpClient client = new HttpClient();
PostMethod post = new PostMethod(url);
RequestEntity entity = null;
client.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"UTF-8");
entity = new StringRequestEntity("{\"name\":\"tom\",\"age\":28}", "application/json", "UTF-8");
post.setRequestEntity(entity);
post.setRequestHeader("Accept","application/xml");
client.executeMethod(post);
String response = post.getResponseBodyAsString();