requestproxy 教程

1.requestproxy 介绍

requestproxy是基于httpclient做的个工具包,利用了httpclient的连接池功能,同时基于几个注解,可以让大家把外部的http接口,轻松的融合到我们项目中,而不是每一个请求都写一个URL,特别适合调用外部API接口较多的项目

2.功能点

  1. 可以使http请求进行接口化,使得http接口更好的和java做融合
  2. 融合json可以自动转为bean
  3. 也可以解析符合要求的xml,基本也是无脑
  4. 负责的返回string,大家可以自己解析
  5. 提供几个通用的签名工具
  6. 支持get和post请求
  7. 提供转码工程

3.spring 配置

    <!-- httpclient线程池 -->

    <bean id="connectionManagerParams"

        class="org.apache.commons.httpclient.params.HttpConnectionManagerParams">

        <property name="connectionTimeout" value="120000" />

        <property name="soTimeout" value="120000" />

        <property name="maxTotalConnections" value="30" />

        <property name="defaultMaxConnectionsPerHost" value="20" />

    </bean>

    <bean id="connectionManager"

        class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager">

        <property name="params" ref="connectionManagerParams" />

    </bean>

    <bean id="httpClient" class="org.apache.commons.httpclient.HttpClient">

        <constructor-arg>

            <ref bean="connectionManager" />

        </constructor-arg>

    </bean>

    <!-- 注册 HTTP请求动态代理接口,只有这个是独有的,上面都是通用的 -->

    <bean class="com.onepiece.requestproxy.factory.RequestBeanScannerConfigurer">

        <property name="basePackage" value="com.jueyue.onepiece.test.request">

        </property>

    </bean>

4.注解使用介绍

项目是基于注解和接口来实现的,所以注解运用是否熟练,关系到功能是否正常

  • @IRequest 类注解和spring的@Server等功能相似
  • @IRequestMethod 方法注解,可不填,默认post请求,60秒超时
  • @IRequestParam 参数注解  必填,设置参数名称,参数序列,是否签名

参数特殊名称,URL 或者url 表示请求地址,也可以写到@IRequestMethod

5.实例

请求接口

@IRequest("testRequest")

public interface ITestRequest {

    @IRequestMethod(type = RequestTypeEnum.GET, url = "http://api.map.baidu.com/telematics/v3/weather")

    String testGet(@IRequestParam("location") String location,

                   @IRequestParam("output") String output, @IRequestParam("ak") String ak);

    @IRequestMethod(type = RequestTypeEnum.GET, url = "http://api.map.baidu.com/telematics/v3/weather")

    BaiduWeatherEntity testGetEntity(@IRequestParam("location") String location,

                                     @IRequestParam("output") String output,

                                     @IRequestParam("ak") String ak);

}

请求百度的天气情况,一个是直接返回字符串,一个是返回对象

    测试用例

public class ITestRequestTest extends SpringTxTestCase {

    @Autowired

    private ITestRequest testRequest;

    @Test

    public void testGet() {

        String re = testRequest.testGet("北京""json""5slgyqGDENN7Sy7pw29IUvrZ");

        System.out.println(re);

        BaiduWeatherEntity entity = JSONUtil.parseJson(re, BaiduWeatherEntity.class);

        System.out.println(entity.getStatus());

        entity = testRequest.testGetEntity("北京""json""5slgyqGDENN7Sy7pw29IUvrZ");

        System.out.println(JSONUtil.toJson(entity));

    }

}

 
  

public class BaiduWeatherEntity {

    private String error;

    private String date;

    private String status;

}

可以直接注入接口,获得对象

    返回结果

返回的字符串

    

{"error":0,"status":"success","date":"2014-12-12","results":[{"currentCity":"北京","pm25":"11","index":[{"title":"穿衣","zs":"寒冷","tipt":"穿衣指数","des":"天气寒冷,建议着厚羽绒服、毛皮大衣加厚毛衣等隆冬服装。年老体弱者尤其要注意保暖防冻。"},{"title":"洗车","zs":"较不宜","tipt":"洗车指数","des":"较不宜洗车,未来一天无雨,风力较大,如果执意擦洗汽车,要做好蒙上污垢的心理准备。"},{"title":"旅游","zs":"一般","tipt":"旅游指数","des":"天气较好,温度稍低,而且风稍大,让您感觉有些冷,会对外出有一定影响,外出注意防风保暖。"},{"title":"感冒","zs":"易发","tipt":"感冒指数","des":"昼夜温差大,风力较强,易发生感冒,请注意适当增减衣服,加强自我防护避免感冒。"},{"title":"运动","zs":"较不宜","tipt":"运动指数","des":"天气较好,但考虑风力较大,天气寒冷,推荐您进行室内运动,若在户外运动须注意保暖。"},{"title":"紫外线强度","zs":"弱","tipt":"紫外线强度指数","des":"紫外线强度较弱,建议出门前涂擦SPF在12-15之间、PA+的防晒护肤品。"}],"weather_data":[{"date":"周五 12月12日 (实时:3℃)","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/qing.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/qing.png","weather":"晴","wind":"北风4-5级","temperature":"3 ~ -8℃"},{"date":"周六","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/qing.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/qing.png","weather":"晴","wind":"微风","temperature":"4 ~ -8℃"},{"date":"周日","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/qing.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/yin.png","weather":"晴转阴","wind":"微风","temperature":"3 ~ -4℃"},{"date":"周一","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/yin.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/qing.png","weather":"阴转晴","wind":"北风5-6级","temperature":"0 ~ -7℃"}]}]}

对象输出的结构

success

自己返回的对象结构

{"error":"0","date":"2014-12-12","status":"success"}

因为是简单的测试,就没有建立复杂的对象

说说优点,可以容融合对象,把没有提供jar的API接口,也想java一样接入进来,json可以自动过滤不想要的数据,建立对象不用那么负责,不用一个一个new
URL来处理异常等等

项目地址点击打开链接

时间: 2024-10-12 13:19:18

requestproxy 教程的相关文章

给自己的requestProxy写个教程

requestProxy 是自己工作的需要,因为公司的业务,经常要对接第三方也就是各种供应,总是各种tttp,webservice webservice其实还有如果有的供应商提供了jar,这个注入就来就好了,关键是好多都是http的没有什么可用的(或者我不知道),之前又参与了jeecg的minidao所以 用minidao的思路做了requestProxym就是用来接口和代理来完成所有的请求工作,然后使用Jackson和dom4j来完成对象的解析. 感觉更多多供应返回的xml,自己也写了一个xm

Windows Git+TortoiseGit简易使用教程

转载自 http://blog.csdn.net/jarelzhou/article/details/8256139 官方教程:http://tortoisegit.org/docs/tortoisegit/(英文版) 为什么选择Git 效率 很多人有一种习惯吧,什么软件都要最新的,最好的.其实吧,软件就是工具,生产力工具,为的是提高我们的生产力.如果现有的工具已经可以满足生产力要求了,就没有必要换了.生产效率高低应当是选择工具的第一位. 历史 开源世界的版本控制系统,经历了这么几代: 第一代,

微信公众号中添加外部链接地址的图文教程

2017-9-18,长沙,有点闷,有点热. 本教程教大家如何在微信公众号中,添加外部的链接,网络有很多教程,但由于表述不太清楚,出个教程吧.最终实现在微信后台管理平台"原文链接"处插入外部链接,用户点击发布好的图文文章底部左下角的"阅读原文",就可以跳转到您添加的外部链接页面中去. 第1步. 使用微信公众管理帐号登陆微信管理后台 > 素材管理 > 图文消息 >  新建图文消息或者编辑文章都可以,如下图所示: 第2步. 之后,将页面向下拉,看到底部&

win2003从组策略关闭端口(445/135/137/138/139/3389等)教程

一些恶劣的病毒会从某些端口入侵计算机,因此关闭某些用不到的而又具有高风险的端口就显得很有必要,是服务器管理员要做的基本的安全防范.本文将介绍win2003系统在组策略关闭某一个端口的教程,文章以关闭445端口为例. 首先要说明的是,此方法不仅仅适用于win2003,也适用于win7,且操作方法完全相同,所以win7用户也可以按照本文教程操作. 1.打开组策略编辑器 按组合键WIN+R打开运行窗口,然后输入gpedit.msc,按回车键,即可进入组策略编辑器. 2.创建 IP 安全策略 展开选项"

微信小程序实例教程(一)

序言 开始开发应用号之前,先看看官方公布的「小程序」教程吧!(以下内容来自微信官方公布的「小程序」开发指南) 本文档将带你一步步创建完成一个微信小程序,并可以在手机上体验该小程序的实际效果.这个小程序的首页将会显示欢迎语以及当前用户的微信头像,点击头像,可以在新开的页面中查看当前小程序的启动日志. 1. 获取微信小程序的 AppID 首先,我们需要拥有一个帐号,如果你能看到该文档,我们应当已经邀请并为你创建好一个帐号.注意不可直接使用服务号或订阅号的 AppID. 利用提供的帐号,登录https

SQL Server2005安装材料及教程编制

首发:https://www.douban.com/note/579628972/ 系统为 win10SQL Server 安装材料下载 链接:http://p删除an.baidu.com/s/1中文miQ1ZQg 密码:pszf挂不补,可到bdsola.com搜索下载 1.安装教程(幸运E版):http://jingyan.baidu.com/article/acf728fd1a30d0f8e510a380.html 注意:当你的电脑是多核的时候可能会出现安装错误   2.此时推荐教程:htt

mac数据恢复软件EasyRecovery使用教程

mac数据恢复软件EasyRecovery使用教程 文件丢失是非常让人郁闷的!因为没有备份所以很多重要的东西都没有办法找回!小编为大家准备了EasyRecovery,这款数据恢复软件费非常好用,可以将您丢失的数据找回.小编还特意为大家准备了数据恢复软件EasyRecovery使用教程,下面就和小编一起来看看具体如何使用吧! <ignore_js_op> 数据恢复软件EasyRecovery使用教程介绍:第一步:我们需要在Mac中安装好EasyRecovery for Mac,然后启动EasyR

mac苹果电脑上Mathtype软件的安装教程

对于数学学习来将,Mathtype是一款非常不错的工具,在这里您可以方便快捷的计算出公式的结果,只需要将方程式填写进去就能出来结果.小编为大家准备了Mathtype安装教程,安装的过程是非常简单的,安装好了之后会让您的工作变得更加轻松,还能提升工作的效率哦! Mathtype安装教程介绍:第一步:打开下载的Mathtype文件 第二步:点击左边的安装文件,会得到提示,下图所示: 第三步:选择好,然后会在弹出提示窗口,点击继续,如下图所示: 第四步:因为暂时只有英文版的,所以选择英文版,点击继续安

JavaWeb之Java Servlet完全教程(转)

Servlet 是一些遵从Java Servlet API的Java类,这些Java类可以响应请求.尽管Servlet可以响应任意类型的请求,但是它们使用最广泛的是响应web方面的请求. Servlet必须部署在Java servlet容器才能使用.虽然很多开发者都使用Java Server Pages(JSP)和Java Server Faces(JSF)等Servlet框架,但是这些技术都要在幕后通过Servlet容器把页面编译为Java Servlet.也就是说,了解Java Servle