根据请求头accept的内容(application/xml、application/json)动态的让服务端响应xml或json数据(同理也能够经过content-type动态的进行xml或json参数请求)java
1. 定义webservice服务端与实体类web
@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. 经过配置将服务注册到cxfspring
<?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解析实现类(其余引入省略)apache
<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响应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响应app
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();