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

根据请求头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();

 

转载于:https://my.oschina.net/u/3536632/blog/3067232

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值