maven
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.1</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.10.0</version>
</dependency>
HttpUtil
public class HttpUtil {
private final static OkHttpClient client = new OkHttpClient();
/**
* GET 请求
* @param url
* @param param
* @param header
* @param type_ref
* @param <T>
* @return 返回json
*/
public static <T> T get_json (String url, Map<String,String> param, Map<String,String> header, TypeReference<T> type_ref){
String json_str = get_str(url, param, header);
if (null == json_str || json_str.length() == 0){
return null;
}
return JsonUtil.parse_any(json_str, type_ref);
}
/**
* GET 请求
* @param url
* @param param
* @param header
* @return 返回UTF-8字符串
*/
public static String get_str(String url, Map<String,String> param, Map<String,String> header){
byte[] bytes = get(url, param, header);
return null == bytes ? null : new String(bytes, StandardCharsets.UTF_8);
}
/**
* GET 请求
* @param url
* @param param
* @param header
* @return 返回byte[]
*/
public static byte[] get(String url, Map<String,String> param,Map<String,String> header){
try {
HttpUrl http_url = HttpUrl.parse(url);
Request.Builder builder = new Request.Builder();
//param
HttpUrl.Builder http_url_builder = new HttpUrl.Builder()
.scheme(http_url.scheme())//协议
.host(http_url.host())//主机地址
.addPathSegments(http_url.encodedPath());//路径
if (null != param && !param.isEmpty()){//添加参数
for (Map.Entry<String,String> entry : param.entrySet()) {
http_url_builder.addQueryParameter(entry.getKey(),entry.getValue());
}
}
http_url = http_url_builder.build();
//header
if (null != header && !header.isEmpty()){//请求头
for (Map.Entry<String,String> entry : header.entrySet()) {
builder.header(entry.getKey(),entry.getValue());
}
}
builder.url(http_url);
Request request = builder.build();
Response response = client.newCall(request).execute();
if (response.code() != 200){
return null;
}
ResponseBody body = response.body();
return body.bytes();
}catch (Exception e){
return null;
}
}
public static final MediaType JSON = MediaType.get("application/json; charset=utf-8");
public static <T> T post_json (String url, Map<String,String> param, Map<String,String> header, TypeReference<T> type_ref){
String json_str = post_str(url, param, header);
if (null == json_str || json_str.length() == 0){
return null;
}
return JsonUtil.parse_any(json_str, type_ref);
}
/**
* post 请求
* @param url
* @param param
* @param header
* @return
*/
public static String post_str(String url, Map<String,String> param,Map<String,String> header){
byte[] bytes = post(url, param, header);
return null == bytes ? null : new String(bytes, StandardCharsets.UTF_8);
}
/***
* post 请求
* @param url
* @param param
* @param header
* @return 返回byte数组
*/
public static byte[] post(String url, Map<String,String> param,Map<String,String> header){
try {
String json_str = null == param || param.isEmpty() ? "{}" : JsonUtil.to_json_str(param);
RequestBody body = RequestBody.create(json_str.getBytes(StandardCharsets.UTF_8));
Request.Builder builder = new Request.Builder()
.url(url)
.post(body);
//header
if (null != header && !header.isEmpty()){//请求头
for (Map.Entry<String,String> entry : header.entrySet()) {
builder.header(entry.getKey(),entry.getValue());
}
}
Request request = builder.build();
Response response = client.newCall(request).execute();
if (response.code() != 200){
System.err.println(response.body().string());
return null;
}
return response.body().bytes();
}catch (Exception e){
return null;
}
}
}
JsonUtil
public class JsonUtil {
private static ObjectMapper mapper = null;
private static ObjectMapper get_mapper(){
if (null == mapper){
mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
return mapper;
}
public static String to_json_str(Object obj) {
if (null == obj){
return null;
}
ObjectMapper obj_mapper = JsonUtil.get_mapper();
try {
return obj_mapper.writeValueAsString(obj);
}catch (Exception e){
return null;
}
}
/**
* JSON字符串转数组对象
* @param clazz 数组元素类型
* @param text JSON字符串
* @param <T> 数组元素类型
* @return
* @throws JsonProcessingException
*/
public static <T> List<T> parse_list(Class<T> clazz, String text) {
ObjectMapper obj_mapper = JsonUtil.get_mapper();
CollectionType listType = obj_mapper.getTypeFactory().constructCollectionType(ArrayList.class, clazz);
try {
return JsonUtil.get_mapper().readValue(text, listType);
}catch (Exception e){
return null;
}
}
private static final TypeReference<Map<String, Object>> type_ref = new TypeReference<Map<String, Object>>() {
};
/**
* JSON字符串转 Map<String,Object>
* @param text
* @return
* @throws JsonProcessingException
*/
public static Map<String,Object> parse_obj(String text) {
try {
return JsonUtil.get_mapper().readValue(text, type_ref);
}catch (Exception e){
return null;
}
}
/**
* 自定义类型
* @param text
* @param type_ref
* @param <T>
* @return
*/
public static <T> T parse_any(String text, TypeReference<T> type_ref) {
try {
return JsonUtil.get_mapper().readValue(text, type_ref);
}catch (Exception e){
return null;
}
}
}