简单介绍HttpClient调用接口的使用

进都进来了点个赞再走呗!
你总说总有一天我要干嘛干嘛,说的好像那天真会来一样。
点个赞呗!

简单介绍HttpClient调用接口的使用

第一步:定义HttpUtils类,配置连接时间和读取时间限制

public class HttpUtils(){
 // 设置连接超时时间
 private int connectTimeout = 1000;
 public int getConnectTimeout() {
  return connectTimeout;
 }
 public void setConnectTimeout(int connectTimeout) {
  this.connectTimeout = connectTimeout;
 }
 // 设置读取超时时间
 private int readTimeout = 1000;
 public int getReadTimeout() {
  return readTimeout;
 }
 public void setReadTimeout(int readTimeout) {
  this.readTimeout = readTimeout;
 }
 /**
  * 创建 HTTP client
  * @return 实例
  */
 public HttpClient createHttpClient() {
  HttpClient client = new HttpClient();
  client.getHttpConnectionManager().getParams()
    .setConnectionTimeout(connectTimeout);
  client.getHttpConnectionManager().getParams().setSoTimeout(readTimeout);
  return client;
 }
 }

第二部:我们定义一个调用接口所需要传的参数类,这边我就以学生类来举个例子

public class Stu {
 //主键id
 private  String id;
 //学号
 private String code;
 //姓名
 private String name;
 //年龄
 private int age;
 //年级
 private String grade;
 public String getId() {
  return id;
 }
 public String getCode() {
  return code;
 }
 public String getName() {
  return name;
 }
 public int getAge() {
  return age;
 }
 public String getGrade() {
  return grade;
 }
 public void setId(String id) {
  this.id = id;
 }
 public void setCode(String code) {
  this.code = code;
 }
 public void setName(String name) {
  this.name = name;
 }
 public void setAge(int age) {
  this.age = age;
 }
 public void setGrade(String grade) {
  this.grade = grade;
 }
 public String toStringStu() {
  return "id=" + id + "&code=" + code + "&name=" + name + "&age=" + age + "&grade=" + grade;
 }
 }

第三部:我们来写一下实际调用情况,在此我就当在controller层作调用,实际我们可以将调用写在service服务层,实际调用可分为以下两种情况:
1.当调用接口所传参数为对象时,如下图(此处为你所要调用的接口案例,即代码块中url,别弄错啦!):对象参数
下面上代码块:

这里时@Qualifier易懂例子 https://blog.csdn.net/zhizhuodewo6/article/details/81365695

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ibm.CORBA.iiop.Request;
import com.techown.aia.ccc.service.impl.CccServiceImpl;
import com.techown.aia.utils.HttpUtils;
import net.sf.json.JSONObject;
public class StuController {
 protected Logger logger = LoggerFactory.getLogger(StuController.class);
 @Autowired
 @Qualifier("httpUtils")    //若多个接口调用,保证其唯一性
 private HttpUtils httpUtils;
 public HttpUtils getHttpUtils() {
  return httpUtils;
 }
 public void setHttpUtils(HttpUtils httpUtils) {
  this.httpUtils = httpUtils;
 }
 @RequestMapping("/stuHttpCliet1")
 @ResponseBody
 public String stuClient(Stu stu){
  List<Stu> stulist=new ArrayList<Stu>();
  Map<String, List<Stu>> map=new HashMap<String, List<Stu>>();
  //这里写死数据,实际以前端传值为主
  stu.setId("1");
  stu.setCode("1001");
  stu.setName("张三");
  stu.setAge(20);
  stu.setGrade("大一");
  stulist.add(stu);
  map.put("list",stulist);
  String request=StringUtils.strip(map.get("list").toString(),"[]");
  HttpClient client=httpUtils.createHttpClient();
  String response="";
  //若调用接口类似于此类url
  String url="http://localhost:9080/stuClient";
  try {
   PostMethod post=new PostMethod(url);
   post.setRequestEntity(new StringRequestEntity(request, "text/html", "UTF-8"));
   post.setRequestHeader("content-type", "text/html");
   HttpMethodParams params = post.getParams();
   params.setContentCharset("UTF-8");
   int status=client.executeMethod(post);
   //status为200时,调用成功
   if (status == HttpStatus.SC_OK) {
    response = post.getResponseBodyAsString();
    JSONObject jsonObject=JSONObject.fromObject(response);
    System.out.print(jsonObject);
   }
  } catch (Exception e) {
   logger.error("error {}",e.getMessage());
  }
  return null;
 }
 }

2.当调用接口所传参数为携带参数时,如下图(此处为你所要调用的接口案例,即代码块中url,别弄错啦!):
携带参数
下面上代码块(放同一Controller类中):

@RequestMapping("/stuHttpCliet2")
 @ResponseBody
 public String stuClientp(Stu stup) throws UnsupportedEncodingException{
  //这里写死数据,实际以前端传值为主
  stup.setId("1");
  stup.setCode("1001");
  stup.setName("张三");
  stup.setAge(20);
  stup.setGrade("大一");
  HttpClient client=httpUtils.createHttpClient();
  String response="";
  //若调用接口类似于此类url 
  String url="http://localhost:9080/stuClient?id=&code=&name=&age=&grade=";
  String url2="http://localhost:9080/stuClient";
  String requestParam=stup.toStringStu();
  //此处为正常调用
  //String request=url2+"?"+requestParam;
  //此处所传五个参数中不能有空格, 类似于这种   code='YY   NN  '或name='张三',
  //否则要对参数进行编码,即URLEncoder.encode(code,'UTF-8')或URLEncoder.encode(name,'UTF-8'),对上面写死参数以下写法
  String request=url2+"?"+"id="+stup.getId()+"&code="+stup.getCode()+"&name="+URLEncoder.encode(stup.getName(),"UTF-8")
   +"&age="+stup.getAge()+"&grade="+URLEncoder.encode(stup.getGrade(), "UTF-8");
  try {
   PostMethod post=new PostMethod(url2);
   post.setRequestEntity(new StringRequestEntity(request, "text/html", "UTF-8"));
   post.setRequestHeader("content-type", "text/html");
   HttpMethodParams params = post.getParams();
   params.setContentCharset("UTF-8");
   int status=client.executeMethod(post);
    //status为200时,调用成功
   if (status == HttpStatus.SC_OK) {
    response = post.getResponseBodyAsString();
    JSONObject jsonObject=JSONObject.fromObject(response);
    System.out.print(jsonObject);
   }
  } catch (Exception e) {
   logger.error("error {}",e.getMessage());
  }
  return null;
 }

整理不易,希望对进来的小伙伴们有帮助哈!
临走再送一句毒鸡汤给你们,努力不一定成功,但不努力一定很轻松。

发布了4 篇原创文章 · 获赞 5 · 访问量 257

猜你喜欢

转载自blog.csdn.net/weixin_43599906/article/details/103889666