Java-接口测试请求工具类

该博客介绍了如何使用OkHttps库结合Jackson进行HTTP接口的异步调用,包括设置基础URL、添加消息转换器、构建请求参数及处理响应数据。示例代码展示了上传信息的POST请求,同时解析并处理返回的JSON响应,根据响应码给出不同的输出。
摘要由CSDN通过智能技术生成

模拟请求发送,程序自动执行接口调用,代码如下:
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/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值