进都进来了点个赞再走呗!
你总说总有一天我要干嘛干嘛,说的好像那天真会来一样。
简单介绍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;
}
整理不易,希望对进来的小伙伴们有帮助哈!
临走再送一句毒鸡汤给你们,努力不一定成功,但不努力一定很轻松。