模拟请求发送,程序自动执行接口调用,代码如下:
pom依赖:
<!-- OkHttps 与 jackson 一起使用 -->
<dependency>
<groupId>com.ejlchina</groupId>
<artifactId>okhttps-jackson</artifactId>
<version>2.5.0</version>
</dependency>
<!-- json格式化 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.4</version>
</dependency>
工具主类代码如下:
import java.io.File;
import java.io.RandomAccessFile;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import com.UtilsPackage.bean.JsonMsgConvertor;
import com.UtilsPackage.bean.RequestObject;
import com.UtilsPackage.bean.ResponseObject;
import com.alibaba.fastjson.JSONObject;
import com.ejlchina.okhttps.HTTP;
import com.ejlchina.okhttps.HttpResult;
/**
* 接口请求工具类
* @author Administrator
*
*/
public class InterfaceReqUtilClass {
public static void buildHttp(Object obj) {
// System.out.println("info:send request body start....");
//构建 HTTP
HTTP http = HTTP.builder()
.baseUrl("http://")
.addMsgConvertor(new JsonMsgConvertor())//json序列化
.build();
//请求三步曲 1.确定请求方式 2.构建请求任务 3.调用请求方法
// JsonParamObject object = new JsonParamObject();
RequestObject object = (RequestObject)obj;
http.async("101.132.90.137/HennessyRFID/api/bottleBrokenKill/uploadKillInfoTemp") // http://api.example.com/users/1
.bodyType("json")
.addHeader("Content-Type", "application/json")
//1.添加map对象,里边封装json字符串 2.直接设置请求体对象,配置表单序列化
.setBodyPara(object)
.setOnResponse((HttpResult res) -> {
// 得到返回数据
String jsonString = res.getBody().toString();
// System.out.println(jsonString);
//仅对返回状态执行判断输出
ResponseObject rep = JSONObject.parseObject(jsonString,ResponseObject.class);
if(null != rep && null != rep.getCode()) {
if(rep.getCode().equals(10001)) {
System.out.println("error:"+object);
}else if(rep.getCode().equals(0000)){
System.out.println("success:"+object);
}else {
System.out.println("请求体无效....");
}
}
})
.post(); // GET请求
}
/**
* 请求参数解析
* @param url
* @return
*/
public static RequestObject jsonDataParse(String url) {
RequestObject req = new RequestObject();
req.setSpdevId("GZSP0001");
String date = url.split("-")[0].substring(8);
date = date.substring(0,4)+"-"+date.substring(4,6)+"-"+date.substring(6);
req.setDate(date);
List<String> list = new ArrayList<>();
String line = null;
try {
RandomAccessFile raf=new RandomAccessFile(url, "r");
while(null != (line=raf.readLine())) {//读到数据
String json = new String(line.getBytes("ISO-8859-1"),"UTF-8");
list.add(json);
}
raf.close();
} catch (Exception e) {
e.printStackTrace();
}
req.setList(list);
return req;
}
public static List<String> readFilePath(String url) {
List<String> fileList = new ArrayList<>();
File file = new File(url); // F://test
File[] files = file.listFiles();
if(null != files) {
for(File f : files) {
fileList.add(f.toString());
}
}
return fileList;
}
public static void main(String[] args) throws ParseException {
RequestObject req = null;
List<String> list = readFilePath("F://test");
for(String url : list) {
req = jsonDataParse(url);
buildHttp(req);
}
}
}
配置类:
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Type;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.ejlchina.okhttps.Array;
import com.ejlchina.okhttps.ConvertProvider;
import com.ejlchina.okhttps.JacksonArray;
import com.ejlchina.okhttps.JacksonMapper;
import com.ejlchina.okhttps.JacksonMsgConvertor;
import com.ejlchina.okhttps.Mapper;
import com.ejlchina.okhttps.MsgConvertor;
import com.ejlchina.okhttps.internal.HttpException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fasterxml.jackson.databind.type.CollectionType;
public class JsonMsgConvertor implements MsgConvertor, ConvertProvider {
private ObjectMapper objectMapper;
private final Map<Type, TypeReference<?>> cache = new HashMap<>();
private boolean typeCached;
public JsonMsgConvertor() {
this(new ObjectMapper());
}
public JsonMsgConvertor(ObjectMapper objectMapper) {
this(objectMapper, false);
}
public JsonMsgConvertor(ObjectMapper objectMapper, boolean typeCached) {
this.objectMapper = objectMapper;
this.typeCached = typeCached;
}
@Override
public String mediaType() {
return "application/json";
}
@Override
public Mapper toMapper(InputStream in, Charset charset) {
try {
JsonNode json = objectMapper.readTree(new InputStreamReader(in, charset));
if (json.isObject()) {
return new JacksonMapper((ObjectNode) json);
}
if (json.isNull() || json.isMissingNode()) {
return null;
}
throw new HttpException("不是 一个 json 对象:" + json);
} catch (IOException e) {
throw new HttpException("Jackson 解析异常", e);
}
}
@Override
public Array toArray(InputStream in, Charset charset) {
try {
JsonNode json = objectMapper.readTree(new InputStreamReader(in, charset));
if (json.isArray()) {
return new JacksonArray((ArrayNode) json);
}
if (json.isNull() || json.isMissingNode()) {
return null;
}
throw new HttpException("不是 一个 json 数组:" + json);
} catch (IOException e) {
throw new HttpException("Jackson 解析异常", e);
}
}
@Override
public byte[] serialize(Object object, Charset charset) {
try {
return objectMapper.writeValueAsString(object).getBytes(charset);
} catch (JsonProcessingException e) {
throw new HttpException("Java Bean [" + object + "] Jackson 序列化异常", e);
}
}
@SuppressWarnings("unchecked")
private <T> TypeReference<T> toTypeRef(Type type) {
TypeReference<T> typeRef;
synchronized (cache) {
//noinspection unchecked
typeRef = (TypeReference<T>) cache.get(type);
if (typeRef == null) {
typeRef = new TypeReference<T>() {
@Override
public Type getType() {
return type;
}
};
if (typeCached) {
cache.put(type, typeRef);
}
}
}
return typeRef;
}
@Override
public <T> T toBean(Type type, InputStream in, Charset charset) {
try {
return objectMapper.readValue(new InputStreamReader(in, charset), toTypeRef(type));
} catch (IOException e) {
throw new HttpException("Jackson 解析异常", e);
}
}
@Override
public <T> List<T> toList(Class<T> type, InputStream in, Charset charset) {
CollectionType javaType = objectMapper.getTypeFactory().constructCollectionType(ArrayList.class, type);
try {
return objectMapper.readValue(new InputStreamReader(in, charset), javaType);
} catch (IOException e) {
throw new HttpException("Jackson 解析异常", e);
}
}
@Override
public MsgConvertor getConvertor() {
return new JacksonMsgConvertor();
}
public ObjectMapper getObjectMapper() {
return objectMapper;
}
public void setObjectMapper(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
}
public boolean isTypeCached() {
return typeCached;
}
public void setTypeCached(boolean typeCached) {
this.typeCached = typeCached;
}
}
参数请求响应示例类:
请求参数示例类代码:
import java.util.List;
public class RequestObject {
private String spdevId;
private List<String> list;
private String date;
public String getSpdevId() {
return spdevId;
}
public void setSpdevId(String spdevId) {
this.spdevId = spdevId;
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((date == null) ? 0 : date.hashCode());
result = prime * result + ((list == null) ? 0 : list.hashCode());
result = prime * result + ((spdevId == null) ? 0 : spdevId.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
RequestObject other = (RequestObject) obj;
if (date == null) {
if (other.date != null)
return false;
} else if (!date.equals(other.date))
return false;
if (list == null) {
if (other.list != null)
return false;
} else if (!list.equals(other.list))
return false;
if (spdevId == null) {
if (other.spdevId != null)
return false;
} else if (!spdevId.equals(other.spdevId))
return false;
return true;
}
@Override
public String toString() {
return "RequestObject [spdevId=" + spdevId + ", list=" + list + ", date=" + date + "]";
}
}
响应参数示例类代码:
/**
* 响应体
* @author Administrator
*
*/
public class ResponseObject {
private Integer code;
private String message;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((code == null) ? 0 : code.hashCode());
result = prime * result + ((message == null) ? 0 : message.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ResponseObject other = (ResponseObject) obj;
if (code == null) {
if (other.code != null)
return false;
} else if (!code.equals(other.code))
return false;
if (message == null) {
if (other.message != null)
return false;
} else if (!message.equals(other.message))
return false;
return true;
}
@Override
public String toString() {
return "ResponseObject [code=" + code + ", message=" + message + "]";
}
}
更多Http操作相关知识可查看网站:
https://okhttps.ejlchina.com/v3/