HttpClient和糊涂工具类调用其他http接口
本文经测试可用,直接创建工具类进行调用即可。
HttpClient案例:
引入依赖
1 2 3 4 5 6 7 8 9 10 | <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version> 1.2 . 68 </version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version> 4.3 . 5 </version> </dependency> |
工具类代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import com.alibaba.fastjson.JSONObject; import org.apache.http.HttpResponse; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import java.net.SocketTimeoutException; import java.nio.charset.Charset; public class HttpClientUtils { /** * 发送HttpClient请求 */ public static String sendPost(String requestUrl,String requestParams) { JSONObject jb = new JSONObject(); jb.put( "code" , 0 ); try { CloseableHttpClient httpClient = HttpClients.createDefault(); RequestConfig requestConfig = RequestConfig.custom() .setSocketTimeout( 300 * 1000 ) .setConnectTimeout( 300 * 1000 ) .build(); HttpPost post = new HttpPost(requestUrl); post.setConfig(requestConfig); post.setHeader( "Content-Type" , "application/json;charset=utf-8" ); //传json字符串 StringEntity postingString = new StringEntity(requestParams,Charset.forName( "UTF-8" )); post.setEntity(postingString); HttpResponse response = httpClient.execute(post); String content = EntityUtils.toString(response.getEntity()); System.out.println( "接口返回内容为:" + content); return content; } catch (SocketTimeoutException e) { System.out.println( "调用接口超时,超时时间:" + 300 + "秒,url:" + requestUrl + ",参数:" + requestParams); return jb.toString(); } catch (Exception e) { System.out.println( "调用接口失败,url:" + requestUrl + ",参数:" + requestParams); return jb.toString(); } } } |
调用其他项目接口demo
本地项目调用工具类的sendPost方法并传入对应参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import com.alibaba.fastjson.JSON; import java.util.HashMap; import java.util.Map; public class Test { public static void main(String[] args) { String requestUrl = "http://localhost:8889/testClient" ; Map<String,Object> map1= new HashMap<>(); map1.put( "name" , "信梧" ); map1.put( "age" , 1 ); String jsonStr=JSON.toJSONString(map1); HttpClientUtils.sendPost(requestUrl,jsonStr ); } } |
远程项目接口代码
1 2 3 4 5 6 7 8 9 10 11 | @ResponseBody @RequestMapping (value = "/testClient" , method = RequestMethod.POST) public String map2xml( @RequestBody String json) { System.out.println( "接口被调用..." ); System.out.println( "接收数据为:" +json); HashMap<Object, Object> map = new HashMap<>(); map.put( "userName" , "张三" ); map.put( "age" , 10 ); map.put( "weight" , "60kg" ); return map.toString(); } |
启动远程项目后,启动本地项目Test类,结果如下:
本地项目
远程项目
注意:使用post请求需要指定参数name然后赋value,远程项目接收参数用@RequestBody注解 并且接收参数和传递参数时参数类型相同即可,参数名不一样不影响。
糊涂工具类(hutool)post请求设置body参数为json数据
1 2 3 4 5 6 7 8 9 10 | String deviceUrl = "https://cloud.shdjq.cn/cdb/pc/devlist?_t=" + ts; Map<String, Object> proMap = new HashMap<>(); proMap.put( "id" , 123 ); String deviceInfo = HttpUtil.createPost(deviceUrl).header( "tokenId" , tokenId) .contentType( "application/json" ) .body(JSON.toJSONString(proMap)).execute().body(); JSONObject jsonObject = JSON.parseObject(deviceInfo); String devResult = jsonObject.get( "result" ).toString(); String devs = JSON.parseObject(devResult).get( "devs" ).toString(); JSONArray jsonArray = JSONArray.parseArray(devs); |
now ,fight for future
分类:
Java基础
标签:
HttpClient
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)