httpClient请求cxf-webservice框架-根据accept动态响应json或xml

根据请求头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();
相关文章
相关标签/搜索