diff --git a/boot-service/pom.xml b/boot-service/pom.xml index 06169f7..6dc4028 100644 --- a/boot-service/pom.xml +++ b/boot-service/pom.xml @@ -83,8 +83,12 @@ poi-ooxml 3.14 - - + + + org.apache.httpcomponents + httpclient + 4.5.1 + javax.servlet diff --git a/boot-service/src/main/java/com/xwbing/domain/entity/sys/SysUser.java b/boot-service/src/main/java/com/xwbing/domain/entity/sys/SysUser.java index 2033b80..122cd6a 100644 --- a/boot-service/src/main/java/com/xwbing/domain/entity/sys/SysUser.java +++ b/boot-service/src/main/java/com/xwbing/domain/entity/sys/SysUser.java @@ -1,5 +1,7 @@ package com.xwbing.domain.entity.sys; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import org.hibernate.validator.constraints.Email; @@ -20,6 +22,7 @@ import java.util.List; @EqualsAndHashCode(callSuper = true) @Data @Entity(name = "sys_user_info") +@ApiModel public class SysUser extends BaseEntity { private static final long serialVersionUID = -2447528751353457021L; public static String table = "sys_user_info"; @@ -48,22 +51,21 @@ public class SysUser extends BaseEntity { @NotBlank(message = "性别不能为空") @Pattern(regexp = "[01]", message = "性别格式为0|1,0代表女,1代表男") private String sex; - /** - * 盐值 - */ + @ApiModelProperty(value = "盐值",hidden = true) private String salt; - /** - * 密码 - */ + @ApiModelProperty(value = "密码",hidden = true) private String password; - /** - * 是否为管理员 - */ + @ApiModelProperty(value = "是否为管理员",hidden = true) private String admin; //临时字段 + @ApiModelProperty(hidden = true) private transient String create; + @ApiModelProperty(hidden = true) private transient String modified; + @ApiModelProperty(hidden = true) private transient String sexName; + @ApiModelProperty(hidden = true) private transient List menuArray; + @ApiModelProperty(hidden = true) private transient List buttonArray; } diff --git a/boot-service/src/main/java/com/xwbing/util/RestClientUtil.java b/boot-service/src/main/java/com/xwbing/util/RestClientUtil.java new file mode 100644 index 0000000..19382e5 --- /dev/null +++ b/boot-service/src/main/java/com/xwbing/util/RestClientUtil.java @@ -0,0 +1,233 @@ +package com.xwbing.util; + +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang3.StringUtils; +import org.apache.http.*; +import org.apache.http.client.HttpRequestRetryHandler; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.*; +import org.apache.http.client.protocol.HttpClientContext; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.net.ssl.SSLException; +import java.io.IOException; +import java.io.InterruptedIOException; +import java.io.UnsupportedEncodingException; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + * 项目名称: boot-module-demo + * 创建时间: 2017/11/21 10:36 + * 作者: xiangwb + * 说明: RestClientUtil + */ +public class RestClientUtil { + private static Logger logger = LoggerFactory.getLogger(RestClientUtil.class); + private static PoolingHttpClientConnectionManager poolingHttpClientConnectionManager; + private static final String APPLICATION_JSON = "application/json"; + private static final String URL_ERROR = "Request Url can not be empty"; + private static final String PARAM_ERROR = "Request Params is null"; + + /*** + * 默认连接配置参数 + */ + private static final RequestConfig defaultRequestConfig = RequestConfig.custom().setSocketTimeout(600000).setConnectTimeout(600000).build(); + // Request retry handler + private static HttpRequestRetryHandler retryHandler = (exception, executionCount, context) -> { + logger.info("retryRequest-->"); + if (executionCount > 5) { + return false; + } + if (exception instanceof InterruptedIOException) { + // Timeout + return false; + } + if (exception instanceof UnknownHostException) { + // Unknown host + return false; + } + if (exception instanceof SSLException) { + // SSL handshake exception + return false; + } + HttpClientContext clientContext = HttpClientContext.adapt(context); + HttpRequest request = clientContext.getRequest(); + return !(request instanceof HttpEntityEnclosingRequest); + }; + + static { + poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager(); + // 将最大连接数增加到100 + poolingHttpClientConnectionManager.setMaxTotal(100); + // 将每个路由基础的连接数增加到20 + poolingHttpClientConnectionManager.setDefaultMaxPerRoute(20); + } + + private static CloseableHttpClient getHttpClient() { + return HttpClients.custom() + .setConnectionManager(poolingHttpClientConnectionManager) + .setDefaultRequestConfig(defaultRequestConfig) + .setRetryHandler(retryHandler).setConnectionManagerShared(true) + .build(); + } + + /** + * post请求 json + * + * @param url + * @param param + * @return + */ + public static JSONObject postByJson(String url, JSONObject param) { + if (StringUtils.isEmpty(url)) { + throw new IllegalArgumentException(URL_ERROR); + } + if (param == null) { + throw new IllegalArgumentException(PARAM_ERROR); + } + logger.info("postByJson request URL:{}==================" ,url); + HttpPost post = new HttpPost(url);// 创建HttpPost的实例 + post.setEntity(new StringEntity(param.toString(), "UTF-8"));// 设置参数到请求对象中 + post.addHeader("Content-Type", APPLICATION_JSON);// 发送json数据需要设置contentType + return getResult(post); + } + + /** + * post请求 form + * + * @param url + * @param param + * @return + */ + public static JSONObject postByForm(String url, Map param) { + if (StringUtils.isEmpty(url)) { + throw new IllegalArgumentException(URL_ERROR); + } + if (param == null || param.size() == 0) { + throw new IllegalArgumentException(PARAM_ERROR); + } + logger.info("postByForm request URL:{}================" ,url); + HttpPost post = new HttpPost(url); + // 创建参数队列 + List params = new ArrayList<>(); + for (Map.Entry keys : param.entrySet()) { + params.add(new BasicNameValuePair(keys.getKey(), Objects.toString(keys.getValue()))); + } + try { + post.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); + } catch (UnsupportedEncodingException e) { + logger.error(e.getMessage()); + } + return getResult(post); + } + + /** + * get请求 + * + * @param url + * @return + */ + public static JSONObject get(String url) { + if (StringUtils.isEmpty(url)) { + throw new IllegalArgumentException(URL_ERROR); + } + logger.info("GET request URL:{}======================" ,url); + HttpGet httpGet = new HttpGet(url); + return getResult(httpGet); + } + + /** + * put请求 + * + * @param url + * @param param + * @return + */ + public static JSONObject put(String url, JSONObject param) { + if (StringUtils.isBlank(url)) { + throw new IllegalArgumentException(URL_ERROR); + } + if (param == null || param.size() == 0) { + throw new IllegalArgumentException(PARAM_ERROR); + } + logger.info("PUT request URL:{}====================",url); + HttpPut put = new HttpPut(url); + put.setEntity(new StringEntity(param.toString(), "UTF-8")); + put.addHeader("Content-type", APPLICATION_JSON); + return getResult(put); + } + + /** + * delete请求 + * + * @param url + * @return + */ + public static JSONObject delete(String url) { + if (StringUtils.isBlank(url)) { + throw new IllegalArgumentException(URL_ERROR); + } + logger.info("delete request URL:{}=====================" ,url); + HttpDelete delete = new HttpDelete(url); + return getResult(delete); + } + + /** + * 获取结果 + * + * @param request + * @return + */ + private static JSONObject getResult(HttpRequestBase request) { + JSONObject jsonResult = null; + CloseableHttpClient client = getHttpClient();// 创建HttpClient的实例 + try { + long start = System.currentTimeMillis(); + CloseableHttpResponse response = client.execute(request); + long end = System.currentTimeMillis(); + long ms=end-start; + logger.info("网络接口请求时间为{} ms=======================",ms); + if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {// 判断网络连接状态码是否正常(0-200都数正常) + HttpEntity entity = response.getEntity();// 获取结果实体 + if (entity != null) { + String result = EntityUtils.toString(entity, "UTF-8"); + jsonResult = JSONObject.parseObject(result); + } + } + response.close(); + } catch (IOException e) { + // result.setSuccess(false); + // result.setMsg(e.getMessage()); + logger.error(e.getMessage()); + } finally { + poolingHttpClientConnectionManager.closeExpiredConnections(); + poolingHttpClientConnectionManager.closeIdleConnections(120, TimeUnit.MILLISECONDS); + } + return jsonResult; + } + + public static void main(String[] args) { + String url = "http://label.drore.com//gis/mapMain/find.json"; + JSONObject j = new JSONObject(); + JSONObject jr = new JSONObject(); + j.put("pageNo", 1); + j.put("pageSize", 10); + jr.put("name", "千岛湖"); + j.put("fields", jr); + String ret = postByJson(url, j).toString(); + System.out.println(ret); + } +} diff --git a/boot-web/src/main/java/com/xwbing/controller/TestControl.java b/boot-web/src/main/java/com/xwbing/controller/TestControl.java index 8caeec3..e74e697 100644 --- a/boot-web/src/main/java/com/xwbing/controller/TestControl.java +++ b/boot-web/src/main/java/com/xwbing/controller/TestControl.java @@ -10,6 +10,7 @@ import com.xwbing.service.ExpressDeliveryService; import com.xwbing.service.QRCodeZipService; import com.xwbing.util.JSONObjResult; import com.xwbing.util.RSAUtil; +import com.xwbing.util.RestClientUtil; import com.xwbing.util.RestMessage; import io.swagger.annotations.Api; import org.apache.commons.lang3.StringUtils; @@ -108,4 +109,13 @@ public class TestControl { throw new BusinessException(ex.getMessage()); } } + + @LogInfo("httpClient") + @PostMapping("httpClient") + public JSONObject httpClient(@RequestBody JSONObject param) { +// String url = "http://localhost:8080/user/listAll"; +// return RestClientUtil.get(url); + String url="http://localhost:8080/user/save"; + return RestClientUtil.postByJson(url, param); + } }