<!-- 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>
@IRequest("testRequest")public interface ITestRequest { String testGet(@IRequestParam("location") String location, @IRequestParam("output") String output, @IRequestParam("ak") String ak); 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来处理异常等等
原文:http://blog.csdn.net/qjueyue/article/details/41909209