package com.whyc.util;
|
|
import com.google.gson.Gson;
|
import com.google.gson.GsonBuilder;
|
import com.google.gson.JsonSyntaxException;
|
import com.whyc.dto.Response;
|
import org.springframework.web.context.request.RequestContextHolder;
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
|
import javax.servlet.ServletContext;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpSession;
|
import java.io.*;
|
import java.lang.reflect.Type;
|
import java.net.HttpURLConnection;
|
import java.net.URL;
|
import java.net.URLEncoder;
|
import java.nio.charset.StandardCharsets;
|
import java.text.SimpleDateFormat;
|
import java.util.Date;
|
import java.util.Map;
|
|
public class HttpUtil {
|
|
/*
|
* 获取HttpServletRequest
|
*/
|
public static HttpServletRequest getRequest(){
|
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
HttpServletRequest request = requestAttributes.getRequest();
|
return request;
|
}
|
|
/*
|
* 获取HttpServletResponse
|
*/
|
public static HttpServletResponse getResponse(){
|
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
HttpServletResponse response = requestAttributes.getResponse();
|
return response;
|
}
|
|
/*
|
* 获取HttpSession
|
*/
|
public static HttpSession getSession(){
|
return getRequest().getSession();
|
}
|
|
/**
|
*
|
* @return 返回application
|
*/
|
public static ServletContext getApplication(){
|
return getSession().getServletContext();
|
}
|
|
/*
|
* 获取将对象转换成json格式
|
*/
|
public static String toJson(Object obj){
|
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
|
return gson.toJson(obj);
|
}
|
|
public static String chageDateToString(Date time,String type){
|
String msg = "";
|
SimpleDateFormat sdf = new SimpleDateFormat(type);
|
msg = sdf.format(time);
|
return msg;
|
}
|
|
|
/**
|
*
|
* @param datetype 需要解析的日期的格式如:"yyyy-MM-dd HH:mm:ss"
|
* @return 得到对应的gson对象
|
*/
|
public static Gson getGson(String datetype){
|
return new GsonBuilder().setDateFormat(datetype).create();
|
}
|
|
/**
|
* 获取默认的gson对象
|
* @return
|
*/
|
public static Gson getGson(){
|
return new Gson();
|
}
|
|
|
public static <T> T getObject(String jsonstring,Type listtype){
|
Gson gson=new Gson();
|
T t=null;
|
try {
|
t=gson.fromJson(jsonstring, listtype);
|
} catch (JsonSyntaxException e) {
|
e.printStackTrace();
|
}
|
return t;
|
}
|
|
/**
|
* get方式的http请求
|
*
|
* @param httpUrl 请求地址
|
* @return 返回结果
|
*/
|
public static Response<String> doGet(String httpUrl, String queryParams) {
|
HttpURLConnection connection = null;
|
InputStream inputStream = null;
|
BufferedReader bufferedReader = null;
|
String result = null;// 返回结果字符串
|
Response<String> response = new Response<>();
|
try {
|
// 创建远程url连接对象
|
URL url = new URL(new StringBuffer(httpUrl).append("?").append(queryParams).toString());
|
// 通过远程url连接对象打开一个连接,强转成httpURLConnection类
|
connection = (HttpURLConnection) url.openConnection();
|
// 设置连接方式:get
|
connection.setRequestMethod("GET");
|
// 设置连接主机服务器的超时时间:15000毫秒
|
connection.setConnectTimeout(5000);
|
// 设置读取远程返回的数据时间:60000毫秒
|
connection.setReadTimeout(6000);
|
// 发送请求
|
connection.connect();
|
// 通过connection连接,获取输入流
|
if (connection.getResponseCode() == 200) {
|
inputStream = connection.getInputStream();
|
// 封装输入流,并指定字符集
|
bufferedReader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
|
// 存放数据
|
StringBuilder sbf = new StringBuilder();
|
String temp;
|
while ((temp = bufferedReader.readLine()) != null) {
|
sbf.append(temp);
|
sbf.append(System.getProperty("line.separator"));
|
}
|
result = sbf.toString();
|
response.set(1,result);
|
}
|
} catch (IOException e) {
|
response.set(0);
|
String message = e.getMessage();
|
response.setData(message);
|
} finally {
|
// 关闭资源
|
if (null != bufferedReader) {
|
try {
|
bufferedReader.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
if (null != inputStream) {
|
try {
|
inputStream.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
if (connection != null) {
|
connection.disconnect();// 关闭远程连接
|
}
|
}
|
return response;
|
}
|
|
public static Response<String> doPost(String httpUrl, String requestBody) {
|
HttpURLConnection connection = null;
|
InputStream inputStream = null;
|
OutputStream outputStream =null;
|
BufferedReader bufferedReader = null;
|
String result = null;// 返回结果字符串
|
Response<String> response = new Response<>();
|
try {
|
// 创建远程url连接对象
|
URL url = new URL(new StringBuffer(httpUrl).toString());
|
// 通过远程url连接对象打开一个连接,强转成httpURLConnection类
|
connection = (HttpURLConnection) url.openConnection();
|
// 设置连接方式:post
|
connection.setRequestMethod("POST");
|
// 设置连接主机服务器的超时时间:15000毫秒
|
connection.setConnectTimeout(5000);
|
// 设置读取远程返回的数据时间:60000毫秒
|
connection.setReadTimeout(6000);
|
|
//请求体
|
connection.setDoOutput(true);
|
outputStream = connection.getOutputStream();
|
OutputStreamWriter osw = new OutputStreamWriter(outputStream,"UTF-8");
|
|
osw.write(requestBody);
|
osw.flush();
|
// 发送请求
|
connection.connect();
|
// 通过connection连接,获取输入流
|
if (connection.getResponseCode() == 200) {
|
inputStream = connection.getInputStream();
|
// 封装输入流,并指定字符集
|
bufferedReader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
|
// 存放数据
|
StringBuilder sbf = new StringBuilder();
|
String temp;
|
while ((temp = bufferedReader.readLine()) != null) {
|
sbf.append(temp);
|
sbf.append(System.getProperty("line.separator"));
|
}
|
result = sbf.toString();
|
response.set(1);
|
response.setData(result);
|
}
|
} catch (IOException e) {
|
String message = e.getMessage();
|
response.set(0);
|
response.setData(message);
|
} finally {
|
// 关闭资源
|
if (null != bufferedReader) {
|
try {
|
bufferedReader.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
if (null != inputStream) {
|
try {
|
inputStream.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
if (connection != null) {
|
connection.disconnect();// 关闭远程连接
|
}
|
if (null != outputStream) {
|
try {
|
outputStream.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
return response;
|
}
|
|
/**
|
* 将map型转为请求参数型
|
*
|
* @param data
|
* @return
|
*/
|
public static String urlEncode(Map<String, ?> data) {
|
StringBuilder sb = new StringBuilder();
|
for (Map.Entry<String, ?> i : data.entrySet()) {
|
try {
|
sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue() + "", "UTF-8")).append("&");
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
}
|
String result = sb.toString();
|
result = result.substring(0, result.lastIndexOf("&"));
|
return result;
|
}
|
}
|