微信登陆(缺少accesstoken,待申请)
This commit is contained in:
parent
53e0f1b6c0
commit
8b5f078861
26
pom.xml
26
pom.xml
@ -13,22 +13,13 @@
|
|||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
<name>JdcProject</name>
|
<name>JdcProject</name>
|
||||||
<description>JdcProject</description>
|
<description>JdcProject</description>
|
||||||
<url/>
|
<packaging>jar</packaging>
|
||||||
<licenses>
|
|
||||||
<license/>
|
|
||||||
</licenses>
|
|
||||||
<developers>
|
|
||||||
<developer/>
|
|
||||||
</developers>
|
|
||||||
<scm>
|
|
||||||
<connection/>
|
|
||||||
<developerConnection/>
|
|
||||||
<tag/>
|
|
||||||
<url/>
|
|
||||||
</scm>
|
|
||||||
<properties>
|
<properties>
|
||||||
|
<maven.compiler.source>17</maven.compiler.source>
|
||||||
|
<maven.compiler.target>17</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<java.version>17</java.version>
|
<java.version>17</java.version>
|
||||||
<lombok.version>1.18.4</lombok.version>
|
<lombok.version>1.18.20</lombok.version>
|
||||||
<mysql.version>8.0.33</mysql.version>
|
<mysql.version>8.0.33</mysql.version>
|
||||||
<druid.version>1.2.19</druid.version>
|
<druid.version>1.2.19</druid.version>
|
||||||
<mybatis-plus.version>3.5.8</mybatis-plus.version>
|
<mybatis-plus.version>3.5.8</mybatis-plus.version>
|
||||||
@ -42,6 +33,7 @@
|
|||||||
<servlet-api.version>5.0.0</servlet-api.version>
|
<servlet-api.version>5.0.0</servlet-api.version>
|
||||||
<common-io.version>2.17.0</common-io.version>
|
<common-io.version>2.17.0</common-io.version>
|
||||||
<swagger3.version>2.8.6</swagger3.version>
|
<swagger3.version>2.8.6</swagger3.version>
|
||||||
|
<easyexcel.version>4.0.3</easyexcel.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
@ -105,7 +97,11 @@
|
|||||||
<artifactId>commons-lang</artifactId>
|
<artifactId>commons-lang</artifactId>
|
||||||
<version>${commons-lang.version}</version>
|
<version>${commons-lang.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba</groupId>
|
||||||
|
<artifactId>easyexcel</artifactId>
|
||||||
|
<version>${easyexcel.version}</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.eclipse.jetty</groupId>
|
<groupId>org.eclipse.jetty</groupId>
|
||||||
<artifactId>jetty-util</artifactId>
|
<artifactId>jetty-util</artifactId>
|
||||||
|
120
src/main/java/com/jdc/jdcproject/controller/WxApiController.java
Normal file
120
src/main/java/com/jdc/jdcproject/controller/WxApiController.java
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
package com.jdc.jdcproject.controller;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.jdc.jdcproject.entity.Users;
|
||||||
|
import com.jdc.jdcproject.exceptionhandler.JdcException;
|
||||||
|
import com.jdc.jdcproject.service.IUsersService;
|
||||||
|
import com.jdc.jdcproject.utils.ConstantUtils;
|
||||||
|
import com.jdc.jdcproject.utils.HttpUtils;
|
||||||
|
import com.jdc.jdcproject.utils.JwtUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.CrossOrigin;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpSession;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@RequestMapping("/api/ucenter/wx")
|
||||||
|
@CrossOrigin
|
||||||
|
public class WxApiController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IUsersService usersService;
|
||||||
|
|
||||||
|
@GetMapping("login")
|
||||||
|
public String genQrConnect(HttpSession session) {
|
||||||
|
// 微信开放平台授权baseUrl
|
||||||
|
String baseUrl = "https://open.weixin.qq.com/connect/qrconnect" +
|
||||||
|
"?appid=%s" +
|
||||||
|
"&redirect_uri=%s" +
|
||||||
|
"&response_type=code" +
|
||||||
|
"&scope=snsapi_login" +
|
||||||
|
"&state=%s" +
|
||||||
|
"#wechat_redirect";
|
||||||
|
// 回调地址
|
||||||
|
String redirectUrl = ConstantUtils.WX_OPEN_REDIRECT_URL; //获取业务服务器重定向地址
|
||||||
|
try {
|
||||||
|
redirectUrl = URLEncoder.encode(redirectUrl, "UTF-8"); //url编码
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
throw new JdcException(20001, e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 防止csrf攻击(跨站请求伪造攻击)
|
||||||
|
//String state = UUID.randomUUID().toString().replaceAll("-", "");//一般情况下会使用一个随机数
|
||||||
|
String state = "imhelen";//为了让大家能够使用我搭建的外网的微信回调跳转服务器,这里填写你在ngrok的前置域名
|
||||||
|
System.out.println("state = " + state);
|
||||||
|
|
||||||
|
// 采用redis等进行缓存state 使用sessionId为key 30分钟后过期,可配置
|
||||||
|
//键:"wechar-open-state-" + httpServletRequest.getSession().getId()
|
||||||
|
//值:satte
|
||||||
|
//过期时间:30分钟
|
||||||
|
|
||||||
|
//生成qrcodeUrl
|
||||||
|
String qrcodeUrl = String.format(
|
||||||
|
baseUrl,
|
||||||
|
ConstantUtils.WX_OPEN_APP_ID,
|
||||||
|
redirectUrl,
|
||||||
|
state);
|
||||||
|
|
||||||
|
|
||||||
|
return "redirect:" + qrcodeUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("callback")
|
||||||
|
public String callback(String code, String state, HttpSession session) {
|
||||||
|
try {
|
||||||
|
//得到授权临时票据code
|
||||||
|
System.out.println("code = " + code);
|
||||||
|
System.out.println("state = " + state);
|
||||||
|
|
||||||
|
//向认证服务器发送请求换取access_token
|
||||||
|
String baseAccessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token" +
|
||||||
|
"?appid=%s" +
|
||||||
|
"&secret=%s" +
|
||||||
|
"&code=%s" +
|
||||||
|
"&grant_type=authorization_code";
|
||||||
|
|
||||||
|
String accessTokenUrl = String.format(baseAccessTokenUrl,
|
||||||
|
ConstantUtils.WX_OPEN_APP_ID,
|
||||||
|
ConstantUtils.WX_OPEN_APP_SECRET,
|
||||||
|
code);
|
||||||
|
String result = HttpUtils.get(accessTokenUrl);
|
||||||
|
System.out.println("accessToken=============" + result);
|
||||||
|
|
||||||
|
//解析json字符串
|
||||||
|
Gson gson = new Gson();
|
||||||
|
HashMap map = gson.fromJson(result, HashMap.class);
|
||||||
|
String accessToken = (String) map.get("access_token");
|
||||||
|
String openid = (String) map.get("openid");
|
||||||
|
|
||||||
|
//查询数据库当前用用户是否曾经使用过微信登录
|
||||||
|
/* Users member = usersService.getByOpenid(openid);
|
||||||
|
if (member == null) {
|
||||||
|
System.out.println("新用户注册");
|
||||||
|
//访问微信的资源服务器,获取用户信息
|
||||||
|
String baseUserInfoUrl = "https://api.weixin.qq.com/sns/userinfo" +
|
||||||
|
"?access_token=%s" +
|
||||||
|
"&openid=%s";
|
||||||
|
String userInfoUrl = String.format(baseUserInfoUrl, accessToken, openid);
|
||||||
|
String resultUserInfo = null;
|
||||||
|
resultUserInfo = HttpUtils.get(userInfoUrl);
|
||||||
|
System.out.println("resultUserInfo==========" + resultUserInfo);
|
||||||
|
HashMap<String, Object> mapUserInfo = gson.fromJson(resultUserInfo, HashMap.class);
|
||||||
|
String nickname = (String) mapUserInfo.get("nickname");
|
||||||
|
String headimgurl = (String) mapUserInfo.get("headimgurl");
|
||||||
|
|
||||||
|
}*/
|
||||||
|
//String memberIdByJwtToken = JwtUtils.getJwtToken(member.getId(), member.getUsername());
|
||||||
|
return "redirect:http://localhost:8000?token=" ;
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new JdcException(20001, "登陆失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -56,6 +56,7 @@ public class UsersServiceImpl extends ServiceImpl<UsersMapper, Users> implements
|
|||||||
|
|
||||||
// 校验密码
|
// 校验密码
|
||||||
if (!MD5.encrypt(password).equals(users.getPassword())) {
|
if (!MD5.encrypt(password).equals(users.getPassword())) {
|
||||||
|
// if (passwprd.equals(users.getPassword())) {
|
||||||
// 密码错误,增加错误次数
|
// 密码错误,增加错误次数
|
||||||
Integer errorCount = users.getErrlogincount() == null ? 0 : users.getErrlogincount();
|
Integer errorCount = users.getErrlogincount() == null ? 0 : users.getErrlogincount();
|
||||||
errorCount++;
|
errorCount++;
|
||||||
|
30
src/main/java/com/jdc/jdcproject/utils/ConstantUtils.java
Normal file
30
src/main/java/com/jdc/jdcproject/utils/ConstantUtils.java
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
package com.jdc.jdcproject.utils;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class ConstantUtils implements InitializingBean {
|
||||||
|
|
||||||
|
@Value("${wx.open.app_id}")
|
||||||
|
private String appId;
|
||||||
|
|
||||||
|
@Value("${wx.open.app_secret}")
|
||||||
|
private String appSecret;
|
||||||
|
|
||||||
|
@Value("${wx.open.redirect_url}")
|
||||||
|
private String redirectUrl;
|
||||||
|
|
||||||
|
public static String WX_OPEN_APP_ID;
|
||||||
|
public static String WX_OPEN_APP_SECRET;
|
||||||
|
public static String WX_OPEN_REDIRECT_URL;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterPropertiesSet() throws Exception {
|
||||||
|
WX_OPEN_APP_ID = appId;
|
||||||
|
WX_OPEN_APP_SECRET = appSecret;
|
||||||
|
WX_OPEN_REDIRECT_URL = redirectUrl;
|
||||||
|
}
|
||||||
|
}
|
764
src/main/java/com/jdc/jdcproject/utils/HttpUtils.java
Normal file
764
src/main/java/com/jdc/jdcproject/utils/HttpUtils.java
Normal file
@ -0,0 +1,764 @@
|
|||||||
|
package com.jdc.jdcproject.utils;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.SocketTimeoutException;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
import java.security.GeneralSecurityException;
|
||||||
|
import java.security.KeyManagementException;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.security.cert.CertificateException;
|
||||||
|
import java.security.cert.X509Certificate;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import javax.net.ssl.*;
|
||||||
|
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
import org.apache.http.Consts;
|
||||||
|
import org.apache.http.HttpEntity;
|
||||||
|
import org.apache.http.HttpResponse;
|
||||||
|
import org.apache.http.NameValuePair;
|
||||||
|
import org.apache.http.client.ClientProtocolException;
|
||||||
|
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.*;
|
||||||
|
import org.apache.http.client.utils.HttpClientUtils;
|
||||||
|
import org.apache.http.conn.ClientConnectionManager;
|
||||||
|
import org.apache.http.conn.ConnectTimeoutException;
|
||||||
|
import org.apache.http.conn.scheme.Scheme;
|
||||||
|
import org.apache.http.conn.scheme.SchemeRegistry;
|
||||||
|
import org.apache.http.conn.ssl.*;
|
||||||
|
import org.apache.http.conn.ssl.SSLSocketFactory;
|
||||||
|
import org.apache.http.entity.ByteArrayEntity;
|
||||||
|
import org.apache.http.entity.ContentType;
|
||||||
|
import org.apache.http.entity.StringEntity;
|
||||||
|
import org.apache.http.impl.client.CloseableHttpClient;
|
||||||
|
import org.apache.http.impl.client.DefaultHttpClient;
|
||||||
|
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;
|
||||||
|
|
||||||
|
|
||||||
|
public class HttpUtils {
|
||||||
|
|
||||||
|
public static final int connTimeout = 10000;
|
||||||
|
public static final int readTimeout = 10000;
|
||||||
|
public static final String charset = "UTF-8";
|
||||||
|
private static HttpClient client = null;
|
||||||
|
private String url;
|
||||||
|
private Map<String, String> param;
|
||||||
|
private int statusCode;
|
||||||
|
private String content;
|
||||||
|
private String xmlParam;
|
||||||
|
private boolean isHttps;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get
|
||||||
|
*
|
||||||
|
* @param host
|
||||||
|
* @param path
|
||||||
|
* @param method
|
||||||
|
* @param headers
|
||||||
|
* @param querys
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static HttpResponse doGet(String host, String path, String method,
|
||||||
|
Map<String, String> headers,
|
||||||
|
Map<String, String> querys)
|
||||||
|
throws Exception {
|
||||||
|
HttpClient httpClient = wrapClient(host);
|
||||||
|
|
||||||
|
HttpGet request = new HttpGet(buildUrl(host, path, querys));
|
||||||
|
for (Map.Entry<String, String> e : headers.entrySet()) {
|
||||||
|
request.addHeader(e.getKey(), e.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
return httpClient.execute(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* post form
|
||||||
|
*
|
||||||
|
* @param host
|
||||||
|
* @param path
|
||||||
|
* @param method
|
||||||
|
* @param headers
|
||||||
|
* @param querys
|
||||||
|
* @param bodys
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static HttpResponse doPost(String host, String path, String method,
|
||||||
|
Map<String, String> headers,
|
||||||
|
Map<String, String> querys,
|
||||||
|
Map<String, String> bodys)
|
||||||
|
throws Exception {
|
||||||
|
HttpClient httpClient = wrapClient(host);
|
||||||
|
|
||||||
|
HttpPost request = new HttpPost(buildUrl(host, path, querys));
|
||||||
|
for (Map.Entry<String, String> e : headers.entrySet()) {
|
||||||
|
request.addHeader(e.getKey(), e.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bodys != null) {
|
||||||
|
List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
|
||||||
|
|
||||||
|
for (String key : bodys.keySet()) {
|
||||||
|
nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key)));
|
||||||
|
}
|
||||||
|
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8");
|
||||||
|
formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
|
||||||
|
request.setEntity(formEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
return httpClient.execute(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Post String
|
||||||
|
*
|
||||||
|
* @param host
|
||||||
|
* @param path
|
||||||
|
* @param method
|
||||||
|
* @param headers
|
||||||
|
* @param querys
|
||||||
|
* @param body
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static HttpResponse doPost(String host, String path, String method,
|
||||||
|
Map<String, String> headers,
|
||||||
|
Map<String, String> querys,
|
||||||
|
String body)
|
||||||
|
throws Exception {
|
||||||
|
HttpClient httpClient = wrapClient(host);
|
||||||
|
|
||||||
|
HttpPost request = new HttpPost(buildUrl(host, path, querys));
|
||||||
|
for (Map.Entry<String, String> e : headers.entrySet()) {
|
||||||
|
request.addHeader(e.getKey(), e.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(body)) {
|
||||||
|
request.setEntity(new StringEntity(body, "utf-8"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return httpClient.execute(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Post stream
|
||||||
|
*
|
||||||
|
* @param host
|
||||||
|
* @param path
|
||||||
|
* @param method
|
||||||
|
* @param headers
|
||||||
|
* @param querys
|
||||||
|
* @param body
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static HttpResponse doPost(String host, String path, String method,
|
||||||
|
Map<String, String> headers,
|
||||||
|
Map<String, String> querys,
|
||||||
|
byte[] body)
|
||||||
|
throws Exception {
|
||||||
|
HttpClient httpClient = wrapClient(host);
|
||||||
|
|
||||||
|
HttpPost request = new HttpPost(buildUrl(host, path, querys));
|
||||||
|
for (Map.Entry<String, String> e : headers.entrySet()) {
|
||||||
|
request.addHeader(e.getKey(), e.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (body != null) {
|
||||||
|
request.setEntity(new ByteArrayEntity(body));
|
||||||
|
}
|
||||||
|
|
||||||
|
return httpClient.execute(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Put String
|
||||||
|
*
|
||||||
|
* @param host
|
||||||
|
* @param path
|
||||||
|
* @param method
|
||||||
|
* @param headers
|
||||||
|
* @param querys
|
||||||
|
* @param body
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static HttpResponse doPut(String host, String path, String method,
|
||||||
|
Map<String, String> headers,
|
||||||
|
Map<String, String> querys,
|
||||||
|
String body)
|
||||||
|
throws Exception {
|
||||||
|
HttpClient httpClient = wrapClient(host);
|
||||||
|
|
||||||
|
HttpPut request = new HttpPut(buildUrl(host, path, querys));
|
||||||
|
for (Map.Entry<String, String> e : headers.entrySet()) {
|
||||||
|
request.addHeader(e.getKey(), e.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(body)) {
|
||||||
|
request.setEntity(new StringEntity(body, "utf-8"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return httpClient.execute(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Put stream
|
||||||
|
*
|
||||||
|
* @param host
|
||||||
|
* @param path
|
||||||
|
* @param method
|
||||||
|
* @param headers
|
||||||
|
* @param querys
|
||||||
|
* @param body
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static HttpResponse doPut(String host, String path, String method,
|
||||||
|
Map<String, String> headers,
|
||||||
|
Map<String, String> querys,
|
||||||
|
byte[] body)
|
||||||
|
throws Exception {
|
||||||
|
HttpClient httpClient = wrapClient(host);
|
||||||
|
|
||||||
|
HttpPut request = new HttpPut(buildUrl(host, path, querys));
|
||||||
|
for (Map.Entry<String, String> e : headers.entrySet()) {
|
||||||
|
request.addHeader(e.getKey(), e.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (body != null) {
|
||||||
|
request.setEntity(new ByteArrayEntity(body));
|
||||||
|
}
|
||||||
|
|
||||||
|
return httpClient.execute(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete
|
||||||
|
*
|
||||||
|
* @param host
|
||||||
|
* @param path
|
||||||
|
* @param method
|
||||||
|
* @param headers
|
||||||
|
* @param querys
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static HttpResponse doDelete(String host, String path, String method,
|
||||||
|
Map<String, String> headers,
|
||||||
|
Map<String, String> querys)
|
||||||
|
throws Exception {
|
||||||
|
HttpClient httpClient = wrapClient(host);
|
||||||
|
|
||||||
|
HttpDelete request = new HttpDelete(buildUrl(host, path, querys));
|
||||||
|
for (Map.Entry<String, String> e : headers.entrySet()) {
|
||||||
|
request.addHeader(e.getKey(), e.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
return httpClient.execute(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String buildUrl(String host, String path, Map<String, String> querys) throws UnsupportedEncodingException {
|
||||||
|
StringBuilder sbUrl = new StringBuilder();
|
||||||
|
sbUrl.append(host);
|
||||||
|
if (!StringUtils.isBlank(path)) {
|
||||||
|
sbUrl.append(path);
|
||||||
|
}
|
||||||
|
if (null != querys) {
|
||||||
|
StringBuilder sbQuery = new StringBuilder();
|
||||||
|
for (Map.Entry<String, String> query : querys.entrySet()) {
|
||||||
|
if (0 < sbQuery.length()) {
|
||||||
|
sbQuery.append("&");
|
||||||
|
}
|
||||||
|
if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) {
|
||||||
|
sbQuery.append(query.getValue());
|
||||||
|
}
|
||||||
|
if (!StringUtils.isBlank(query.getKey())) {
|
||||||
|
sbQuery.append(query.getKey());
|
||||||
|
if (!StringUtils.isBlank(query.getValue())) {
|
||||||
|
sbQuery.append("=");
|
||||||
|
sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (0 < sbQuery.length()) {
|
||||||
|
sbUrl.append("?").append(sbQuery);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sbUrl.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static HttpClient wrapClient(String host) {
|
||||||
|
HttpClient httpClient = new DefaultHttpClient();
|
||||||
|
if (host.startsWith("https://")) {
|
||||||
|
sslClient(httpClient);
|
||||||
|
}
|
||||||
|
|
||||||
|
return httpClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void sslClient(HttpClient httpClient) {
|
||||||
|
try {
|
||||||
|
SSLContext ctx = SSLContext.getInstance("TLS");
|
||||||
|
X509TrustManager tm = new X509TrustManager() {
|
||||||
|
public X509Certificate[] getAcceptedIssuers() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void checkClientTrusted(X509Certificate[] xcs, String str) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void checkServerTrusted(X509Certificate[] xcs, String str) {
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
ctx.init(null, new TrustManager[]{tm}, null);
|
||||||
|
SSLSocketFactory ssf = new SSLSocketFactory(ctx);
|
||||||
|
ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||||
|
ClientConnectionManager ccm = httpClient.getConnectionManager();
|
||||||
|
SchemeRegistry registry = ccm.getSchemeRegistry();
|
||||||
|
registry.register(new Scheme("https", 443, ssf));
|
||||||
|
} catch (KeyManagementException ex) {
|
||||||
|
throw new RuntimeException(ex);
|
||||||
|
} catch (NoSuchAlgorithmException ex) {
|
||||||
|
throw new RuntimeException(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**======================================================================================================================================*/
|
||||||
|
/**======================================================================================================================================*/
|
||||||
|
/**======================================================================================================================================*/
|
||||||
|
/**======================================================================================================================================*/
|
||||||
|
/**======================================================================================================================================*/
|
||||||
|
/**======================================================================================================================================*/
|
||||||
|
static {
|
||||||
|
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
|
||||||
|
cm.setMaxTotal(128);
|
||||||
|
cm.setDefaultMaxPerRoute(128);
|
||||||
|
client = HttpClients.custom().setConnectionManager(cm).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String postParameters(String url, String parameterStr) throws ConnectTimeoutException, SocketTimeoutException, Exception {
|
||||||
|
return post(url, parameterStr, "application/x-www-form-urlencoded", charset, connTimeout, readTimeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String postParameters(String url, String parameterStr, String charset, Integer connTimeout, Integer readTimeout) throws ConnectTimeoutException, SocketTimeoutException, Exception {
|
||||||
|
return post(url, parameterStr, "application/x-www-form-urlencoded", charset, connTimeout, readTimeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String postParameters(String url, Map<String, String> params) throws ConnectTimeoutException,
|
||||||
|
SocketTimeoutException, Exception {
|
||||||
|
return postForm(url, params, null, connTimeout, readTimeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String postParameters(String url, Map<String, String> params, Integer connTimeout, Integer readTimeout) throws ConnectTimeoutException,
|
||||||
|
SocketTimeoutException, Exception {
|
||||||
|
return postForm(url, params, null, connTimeout, readTimeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String get(String url) throws Exception {
|
||||||
|
return get(url, charset, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String get(String url, String charset) throws Exception {
|
||||||
|
return get(url, charset, connTimeout, readTimeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送一个 Post 请求, 使用指定的字符集编码.
|
||||||
|
*
|
||||||
|
* @param url
|
||||||
|
* @param body RequestBody
|
||||||
|
* @param mimeType 例如 application/xml "application/x-www-form-urlencoded" a=1&b=2&c=3
|
||||||
|
* @param charset 编码
|
||||||
|
* @param connTimeout 建立链接超时时间,毫秒.
|
||||||
|
* @param readTimeout 响应超时时间,毫秒.
|
||||||
|
* @return ResponseBody, 使用指定的字符集编码.
|
||||||
|
* @throws ConnectTimeoutException 建立链接超时异常
|
||||||
|
* @throws SocketTimeoutException 响应超时
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static String post(String url, String body, String mimeType, String charset, Integer connTimeout, Integer readTimeout)
|
||||||
|
throws ConnectTimeoutException, SocketTimeoutException, Exception {
|
||||||
|
HttpClient client = null;
|
||||||
|
HttpPost post = new HttpPost(url);
|
||||||
|
String result = "";
|
||||||
|
try {
|
||||||
|
if (StringUtils.isNotBlank(body)) {
|
||||||
|
HttpEntity entity = new StringEntity(body, ContentType.create(mimeType, charset));
|
||||||
|
post.setEntity(entity);
|
||||||
|
}
|
||||||
|
// 设置参数
|
||||||
|
RequestConfig.Builder customReqConf = RequestConfig.custom();
|
||||||
|
if (connTimeout != null) {
|
||||||
|
customReqConf.setConnectTimeout(connTimeout);
|
||||||
|
}
|
||||||
|
if (readTimeout != null) {
|
||||||
|
customReqConf.setSocketTimeout(readTimeout);
|
||||||
|
}
|
||||||
|
post.setConfig(customReqConf.build());
|
||||||
|
|
||||||
|
HttpResponse res;
|
||||||
|
if (url.startsWith("https")) {
|
||||||
|
// 执行 Https 请求.
|
||||||
|
client = createSSLInsecureClient();
|
||||||
|
res = client.execute(post);
|
||||||
|
} else {
|
||||||
|
// 执行 Http 请求.
|
||||||
|
client = HttpUtils.client;
|
||||||
|
res = client.execute(post);
|
||||||
|
}
|
||||||
|
result = IOUtils.toString(res.getEntity().getContent(), charset);
|
||||||
|
} finally {
|
||||||
|
post.releaseConnection();
|
||||||
|
if (url.startsWith("https") && client != null && client instanceof CloseableHttpClient) {
|
||||||
|
((CloseableHttpClient) client).close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 提交form表单
|
||||||
|
*
|
||||||
|
* @param url
|
||||||
|
* @param params
|
||||||
|
* @param connTimeout
|
||||||
|
* @param readTimeout
|
||||||
|
* @return
|
||||||
|
* @throws ConnectTimeoutException
|
||||||
|
* @throws SocketTimeoutException
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static String postForm(String url, Map<String, String> params, Map<String, String> headers, Integer connTimeout, Integer readTimeout) throws ConnectTimeoutException,
|
||||||
|
SocketTimeoutException, Exception {
|
||||||
|
|
||||||
|
HttpClient client = null;
|
||||||
|
HttpPost post = new HttpPost(url);
|
||||||
|
try {
|
||||||
|
if (params != null && !params.isEmpty()) {
|
||||||
|
List<NameValuePair> formParams = new ArrayList<NameValuePair>();
|
||||||
|
Set<Map.Entry<String, String>> entrySet = params.entrySet();
|
||||||
|
for (Map.Entry<String, String> entry : entrySet) {
|
||||||
|
formParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
|
||||||
|
}
|
||||||
|
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formParams, Consts.UTF_8);
|
||||||
|
post.setEntity(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (headers != null && !headers.isEmpty()) {
|
||||||
|
for (Map.Entry<String, String> entry : headers.entrySet()) {
|
||||||
|
post.addHeader(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 设置参数
|
||||||
|
RequestConfig.Builder customReqConf = RequestConfig.custom();
|
||||||
|
if (connTimeout != null) {
|
||||||
|
customReqConf.setConnectTimeout(connTimeout);
|
||||||
|
}
|
||||||
|
if (readTimeout != null) {
|
||||||
|
customReqConf.setSocketTimeout(readTimeout);
|
||||||
|
}
|
||||||
|
post.setConfig(customReqConf.build());
|
||||||
|
HttpResponse res = null;
|
||||||
|
if (url.startsWith("https")) {
|
||||||
|
// 执行 Https 请求.
|
||||||
|
client = createSSLInsecureClient();
|
||||||
|
res = client.execute(post);
|
||||||
|
} else {
|
||||||
|
// 执行 Http 请求.
|
||||||
|
client = HttpUtils.client;
|
||||||
|
res = client.execute(post);
|
||||||
|
}
|
||||||
|
return IOUtils.toString(res.getEntity().getContent(), "UTF-8");
|
||||||
|
} finally {
|
||||||
|
post.releaseConnection();
|
||||||
|
if (url.startsWith("https") && client != null
|
||||||
|
&& client instanceof CloseableHttpClient) {
|
||||||
|
((CloseableHttpClient) client).close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送一个 GET 请求
|
||||||
|
*
|
||||||
|
* @param url
|
||||||
|
* @param charset
|
||||||
|
* @param connTimeout 建立链接超时时间,毫秒.
|
||||||
|
* @param readTimeout 响应超时时间,毫秒.
|
||||||
|
* @return
|
||||||
|
* @throws ConnectTimeoutException 建立链接超时
|
||||||
|
* @throws SocketTimeoutException 响应超时
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static String get(String url, String charset, Integer connTimeout, Integer readTimeout)
|
||||||
|
throws ConnectTimeoutException, SocketTimeoutException, Exception {
|
||||||
|
|
||||||
|
HttpClient client = null;
|
||||||
|
HttpGet get = new HttpGet(url);
|
||||||
|
String result = "";
|
||||||
|
try {
|
||||||
|
// 设置参数
|
||||||
|
RequestConfig.Builder customReqConf = RequestConfig.custom();
|
||||||
|
if (connTimeout != null) {
|
||||||
|
customReqConf.setConnectTimeout(connTimeout);
|
||||||
|
}
|
||||||
|
if (readTimeout != null) {
|
||||||
|
customReqConf.setSocketTimeout(readTimeout);
|
||||||
|
}
|
||||||
|
get.setConfig(customReqConf.build());
|
||||||
|
|
||||||
|
HttpResponse res = null;
|
||||||
|
|
||||||
|
if (url.startsWith("https")) {
|
||||||
|
// 执行 Https 请求.
|
||||||
|
client = createSSLInsecureClient();
|
||||||
|
res = client.execute(get);
|
||||||
|
} else {
|
||||||
|
// 执行 Http 请求.
|
||||||
|
client = HttpUtils.client;
|
||||||
|
res = client.execute(get);
|
||||||
|
}
|
||||||
|
|
||||||
|
result = IOUtils.toString(res.getEntity().getContent(), charset);
|
||||||
|
} finally {
|
||||||
|
get.releaseConnection();
|
||||||
|
if (url.startsWith("https") && client != null && client instanceof CloseableHttpClient) {
|
||||||
|
((CloseableHttpClient) client).close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从 response 里获取 charset
|
||||||
|
*
|
||||||
|
* @param ressponse
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private static String getCharsetFromResponse(HttpResponse ressponse) {
|
||||||
|
// Content-Type:text/html; charset=GBK
|
||||||
|
if (ressponse.getEntity() != null && ressponse.getEntity().getContentType() != null && ressponse.getEntity().getContentType().getValue() != null) {
|
||||||
|
String contentType = ressponse.getEntity().getContentType().getValue();
|
||||||
|
if (contentType.contains("charset=")) {
|
||||||
|
return contentType.substring(contentType.indexOf("charset=") + 8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建 SSL连接
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* @throws GeneralSecurityException
|
||||||
|
*/
|
||||||
|
private static CloseableHttpClient createSSLInsecureClient() throws GeneralSecurityException {
|
||||||
|
try {
|
||||||
|
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
|
||||||
|
public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}).build();
|
||||||
|
|
||||||
|
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new X509HostnameVerifier() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean verify(String arg0, SSLSession arg1) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void verify(String host, SSLSocket ssl)
|
||||||
|
throws IOException {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void verify(String host, X509Certificate cert)
|
||||||
|
throws SSLException {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void verify(String host, String[] cns,
|
||||||
|
String[] subjectAlts) throws SSLException {
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
return HttpClients.custom().setSSLSocketFactory(sslsf).build();
|
||||||
|
|
||||||
|
} catch (GeneralSecurityException e) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
try {
|
||||||
|
String str = post("https://localhost:443/ssl/test.shtml", "name=12&page=34", "application/x-www-form-urlencoded", "UTF-8", 10000, 10000);
|
||||||
|
//String str= get("https://localhost:443/ssl/test.shtml?name=12&page=34","GBK");
|
||||||
|
/*Map<String,String> map = new HashMap<String,String>();
|
||||||
|
map.put("name", "111");
|
||||||
|
map.put("page", "222");
|
||||||
|
String str= postForm("https://localhost:443/ssl/test.shtml",map,null, 10000, 10000);*/
|
||||||
|
System.out.println(str);
|
||||||
|
} catch (ConnectTimeoutException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (SocketTimeoutException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (Exception e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**======================================================================================================================================*/
|
||||||
|
/**======================================================================================================================================*/
|
||||||
|
/**======================================================================================================================================*/
|
||||||
|
/**======================================================================================================================================*/
|
||||||
|
/**======================================================================================================================================*/
|
||||||
|
/**======================================================================================================================================*/
|
||||||
|
public boolean isHttps() {
|
||||||
|
return isHttps;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHttps(boolean isHttps) {
|
||||||
|
this.isHttps = isHttps;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getXmlParam() {
|
||||||
|
return xmlParam;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setXmlParam(String xmlParam) {
|
||||||
|
this.xmlParam = xmlParam;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HttpUtils(String url, Map<String, String> param) {
|
||||||
|
this.url = url;
|
||||||
|
this.param = param;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HttpUtils(String url) {
|
||||||
|
this.url = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setParameter(Map<String, String> map) {
|
||||||
|
param = map;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addParameter(String key, String value) {
|
||||||
|
if (param == null)
|
||||||
|
param = new HashMap<String, String>();
|
||||||
|
param.put(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void post() throws ClientProtocolException, IOException {
|
||||||
|
HttpPost http = new HttpPost(url);
|
||||||
|
setEntity(http);
|
||||||
|
execute(http);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void put() throws ClientProtocolException, IOException {
|
||||||
|
HttpPut http = new HttpPut(url);
|
||||||
|
setEntity(http);
|
||||||
|
execute(http);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void get() throws ClientProtocolException, IOException {
|
||||||
|
if (param != null) {
|
||||||
|
StringBuilder url = new StringBuilder(this.url);
|
||||||
|
boolean isFirst = true;
|
||||||
|
for (String key : param.keySet()) {
|
||||||
|
if (isFirst)
|
||||||
|
url.append("?");
|
||||||
|
else
|
||||||
|
url.append("&");
|
||||||
|
url.append(key).append("=").append(param.get(key));
|
||||||
|
}
|
||||||
|
this.url = url.toString();
|
||||||
|
}
|
||||||
|
HttpGet http = new HttpGet(url);
|
||||||
|
execute(http);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set http post,put param
|
||||||
|
*/
|
||||||
|
private void setEntity(HttpEntityEnclosingRequestBase http) {
|
||||||
|
if (param != null) {
|
||||||
|
List<NameValuePair> nvps = new LinkedList<NameValuePair>();
|
||||||
|
for (String key : param.keySet())
|
||||||
|
nvps.add(new BasicNameValuePair(key, param.get(key))); // 参数
|
||||||
|
http.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8)); // 设置参数
|
||||||
|
}
|
||||||
|
if (xmlParam != null) {
|
||||||
|
http.setEntity(new StringEntity(xmlParam, Consts.UTF_8));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void execute(HttpUriRequest http) throws ClientProtocolException,
|
||||||
|
IOException {
|
||||||
|
CloseableHttpClient httpClient = null;
|
||||||
|
try {
|
||||||
|
if (isHttps) {
|
||||||
|
SSLContext sslContext = new SSLContextBuilder()
|
||||||
|
.loadTrustMaterial(null, new TrustStrategy() {
|
||||||
|
// 信任所有
|
||||||
|
public boolean isTrusted(X509Certificate[] chain,
|
||||||
|
String authType)
|
||||||
|
throws CertificateException {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}).build();
|
||||||
|
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
|
||||||
|
sslContext);
|
||||||
|
httpClient = HttpClients.custom().setSSLSocketFactory(sslsf)
|
||||||
|
.build();
|
||||||
|
} else {
|
||||||
|
httpClient = HttpClients.createDefault();
|
||||||
|
}
|
||||||
|
CloseableHttpResponse response = httpClient.execute(http);
|
||||||
|
try {
|
||||||
|
if (response != null) {
|
||||||
|
if (response.getStatusLine() != null)
|
||||||
|
statusCode = response.getStatusLine().getStatusCode();
|
||||||
|
HttpEntity entity = response.getEntity();
|
||||||
|
// 响应内容
|
||||||
|
content = EntityUtils.toString(entity, Consts.UTF_8);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
response.close();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
httpClient.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getStatusCode() {
|
||||||
|
return statusCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContent() throws ParseException, IOException {
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
}
|
3
src/main/resources/META-INF/MANIFEST.MF
Normal file
3
src/main/resources/META-INF/MANIFEST.MF
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Manifest-Version: 1.0
|
||||||
|
Main-Class: com.jdc.jdcproject.JdcProjectApplication
|
||||||
|
|
@ -18,3 +18,8 @@ server:
|
|||||||
springdoc:
|
springdoc:
|
||||||
swagger-ui:
|
swagger-ui:
|
||||||
path: /swagger-ui.html
|
path: /swagger-ui.html
|
||||||
|
wx:
|
||||||
|
open:
|
||||||
|
app_id:
|
||||||
|
app_secret:
|
||||||
|
redirect_url: http://localhost:8000/
|
||||||
|
16
src/test/java/com/jdc/jdcproject/EasyexcelReader.java
Normal file
16
src/test/java/com/jdc/jdcproject/EasyexcelReader.java
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package com.jdc.jdcproject;
|
||||||
|
|
||||||
|
import com.alibaba.excel.EasyExcel;
|
||||||
|
|
||||||
|
public class EasyexcelReader {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
String fileName = "D:\\ProgramFiles\\project\\JdcProject\\src\\test\\test.xlsx";
|
||||||
|
|
||||||
|
EasyExcel.read(fileName, new ExcelListener(data->{
|
||||||
|
|
||||||
|
}))// 从第3行开始是数据
|
||||||
|
.sheet()
|
||||||
|
.doRead();
|
||||||
|
}
|
||||||
|
}
|
23
src/test/java/com/jdc/jdcproject/ExcelListener.java
Normal file
23
src/test/java/com/jdc/jdcproject/ExcelListener.java
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
package com.jdc.jdcproject;
|
||||||
|
|
||||||
|
import com.alibaba.excel.context.AnalysisContext;
|
||||||
|
import com.alibaba.excel.event.AnalysisEventListener;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class ExcelListener extends AnalysisEventListener<Map<String, Object>> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void invoke(Map<String,Object> data, AnalysisContext context) {
|
||||||
|
System.out.println("读取到数据:" + data);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
|
||||||
|
System.out.println("表头:" + headMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doAfterAllAnalysed(AnalysisContext context) {
|
||||||
|
System.out.println("所有数据读取完成");
|
||||||
|
}
|
||||||
|
}
|
41
src/test/java/com/jdc/jdcproject/MineWorkEntity.java
Normal file
41
src/test/java/com/jdc/jdcproject/MineWorkEntity.java
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
package com.jdc.jdcproject;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class MineWorkEntity {
|
||||||
|
|
||||||
|
@ExcelProperty(value = "日期",index = 0)
|
||||||
|
private String date;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "白班", index = 1)
|
||||||
|
private String dayShift;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "大厂要矿时间",index = 2)
|
||||||
|
private String dayRequestTime;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "下去时间",index = 3)
|
||||||
|
private String dayDownTime;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "11节列数",index = 4)
|
||||||
|
private String day11Count;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "夜班",index = 5)
|
||||||
|
private String nightShift;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "大厂要矿时间",index = 6)
|
||||||
|
private String nightRequestTime;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "下去时间",index = 7)
|
||||||
|
private String nightDownTime;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "11节列数",index = 8)
|
||||||
|
private String night11Count;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "夜班早晨7点以后下",index = 9)
|
||||||
|
private String nightAfter7;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "白班早晨8点以后回来",index = 10)
|
||||||
|
private String dayAfter8Return;
|
||||||
|
}
|
21
src/test/java/com/jdc/jdcproject/Testexcel.java
Normal file
21
src/test/java/com/jdc/jdcproject/Testexcel.java
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
package com.jdc.jdcproject;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class Testexcel {
|
||||||
|
|
||||||
|
@ExcelProperty("姓名")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@ExcelProperty("年龄")
|
||||||
|
private String age;
|
||||||
|
|
||||||
|
@ExcelProperty("性别")
|
||||||
|
private String sex;
|
||||||
|
|
||||||
|
@ExcelProperty("备注")
|
||||||
|
private String beizhu;
|
||||||
|
|
||||||
|
}
|
BIN
src/test/test.xlsx
Normal file
BIN
src/test/test.xlsx
Normal file
Binary file not shown.
BIN
src/test/~$副本2025年4月份电机车运输综合报表.xlsx
Normal file
BIN
src/test/~$副本2025年4月份电机车运输综合报表.xlsx
Normal file
Binary file not shown.
BIN
src/test/副本2025年4月份电机车运输综合报表.xlsx
Normal file
BIN
src/test/副本2025年4月份电机车运输综合报表.xlsx
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user