java后端发送get和post两种请求与定时器

Spring使用@Scheduled注解写定时任务,调用时间设置可自行百度.apache提供HttpClient与HttpGet或HttpPost搭配使用发送get或post请求

1.定义调度时间

定义调用时间
public final static String ProjectOffEvidence =  "0 50 1 * * ?";

2.controller层调用

Controller层方法
@Scheduled(cron = ProjectExceptionScheduleCron.ProjectOffEvidence)
	public void ProjectOffEvidence() throws Exception {
		HttpClientTool hct = new HttpClientTool("本地或者外网url");
		//post请求
		hct.sendPost(String.class);
		//get请求
		hct.sendPost(String.class);
	}

3.发送请求工具类

后台发送请求工具类
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

/**
 * @ClassName: HttpClientTool
 */
public class HttpClientTool {
	
	static Log log = LogFactory.getLog(HttpClientTool.class);
	/**
	 * 访问url
	 */
	private String url;
	
	private HttpClient httpClient;
	
	private Map<String, ? extends Object> params;
	
	private Map<String, ? extends Object> cookie;
	
	private RequestConfig requestConfig;
	
	public HttpClientTool(String url) {
		this.url = url;
		this.httpClient = HttpClients.createDefault();
	}
	
	/**
	 * get请求待更新
	 * @Title: sendGet
	 * @Description: TODO[]
	 * @param @param requestJson
	 * @param @return    设定文件
	 * @return String    返回类型
	 * @throws
	 */
	public <R>R sendGet(Class<R> clazz){
		HttpGet httpGet = new HttpGet(url);
		if(null != requestConfig)
			httpGet.setConfig(requestConfig);
		try {
			HttpResponse response = this.httpClient.execute(httpGet);
			return httpEntityToStr(response.getEntity(), clazz);
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
	}
	
	public static final String COOKIE_KEY = "Cookie";
	
	/**
	 * 发送post请求
	 * @Title: sendPost
	 * @Description: TODO[]
	 * @param @param requestJson
	 * @param @return    设定文件
	 * @return String    返回类型
	 * @throws
	 */
	public <R>R sendPost(Class<R> clazz){
		log.debug(String.format("开始发送post请求:%s", url));
		HttpPost httpPost = new HttpPost(url);
		setEntity(httpPost);
		if(null != cookie)
			httpPost.setHeader(COOKIE_KEY, mapToStrByCookie(cookie));
		if(null != requestConfig)
			httpPost.setConfig(requestConfig);
		try {
			HttpResponse response = this.httpClient.execute(httpPost);
			R obj = httpEntityToStr(response.getEntity(), clazz);
			log.debug(String.format("响应返回值为:%s", JSONTools.convertObj2JsonStr(obj)));
			return obj;
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
	}
	
	public static final String APPLICATION_JSON = "application/json";
	
	/*
	 * 获得httpEntity
	 */
	public void setData(HttpPost httpPost){
		try {
			StringEntity stringEntity = new StringEntity(objToStr(params));
			stringEntity.setContentEncoding(Const.THIS_PROJECT_CHARSET);
			stringEntity.setContentType(APPLICATION_JSON);
			//this.httpEntity = stringEntity;
			httpPost.setEntity(stringEntity);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
	}
	
	@SuppressWarnings("unchecked")
	private <R>R httpEntityToStr(HttpEntity httpEntity, Class<R> clazz){
		try {
			String json = EntityUtils.toString(httpEntity, Const.THIS_PROJECT_CHARSET);
			if(Objects.equals(clazz, Collection.class)){
				return (R) JSONTools.convertJson2Collection(json, clazz);
			}else{
				return (R) JSONTools.convertJson2Class(json, clazz);
			}
		} catch (ParseException | IOException e) {
			e.printStackTrace();
			return null;
		}
	}
	
	private void setEntity(HttpPost httpPost){
		if(params == null) return ;
		List<NameValuePair> httpParam = new ArrayList<>();
		for (Map.Entry<String, ? extends Object> entrys : params.entrySet()) {
			Object val = entrys.getValue();
			if(val instanceof CharSequence || val instanceof Number){
				httpParam.add(new BasicNameValuePair(entrys.getKey(), val.toString()));
			}else {
				httpParam.add(new BasicNameValuePair(entrys.getKey(), JSONTools.convertObj2JsonStr(val)));
			}
		}
		UrlEncodedFormEntity fromEntity = null;
		try{
			fromEntity = new UrlEncodedFormEntity(httpParam, Const.THIS_PROJECT_CHARSET);
		}catch(Exception e){
			e.printStackTrace();
		}
		httpPost.setEntity(fromEntity);
	}

	private String mapToStrByCookie(Map<String, ? extends Object> cookies){
		StringBuilder str = new StringBuilder();
		for (Map.Entry<String, ? extends Object> cookie : cookies.entrySet()) {
			if(str.length() == 0){
				str.append(cookie.getKey()).append('=').append(JSONTools.convertObj2JsonStr(cookie));
			}else{
				str.append(';').append(cookie.getKey()).append('=').append(JSONTools.convertObj2JsonStr(cookie));
			}
		}
		return str.toString();
	}
	
	public void setCookie(Map<String, ? extends Object> cookie) {
		this.cookie = cookie;
	}

	private String objToStr(Object obj){
		return JSONTools.convertObj2JsonStr(obj);
	}

	public HttpClient getHttpClient() {
		return httpClient;
	}

	public void setHttpClient(HttpClient httpClient) {
		this.httpClient = httpClient;
	}

	public Map<String, ? extends Object> getParams() {
		return params;
	}

	public void setParams(Map<String, ? extends Object> params) {
		this.params = params;
	}

	public RequestConfig getRequestConfig() {
		return requestConfig;
	}

	public void setRequestConfig(RequestConfig requestConfig) {
		this.requestConfig = requestConfig;
	}
	
}

 

 

©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页