zhaoyuyan_common

pull/7/head
YOUR_USERNAME 7 months ago
parent 2214c87ef7
commit 017cedb985

@ -0,0 +1,16 @@
package com.sky.constant;
/**
*
* 便
*/
public class PasswordConstant {
/**
* 使 "123456"
*
* 使
*/
public static final String DEFAULT_PASSWORD = "123456";
}

@ -0,0 +1,28 @@
package com.sky.exception;
/**
*
*
* BaseException便
*/
public class AccountLockedException extends BaseException {
/**
*
* 使
*/
public AccountLockedException() {
}
/**
*
* msg
* 便BaseException
*
* @param msg
*/
public AccountLockedException(String msg) {
super(msg);
}
}

@ -0,0 +1,22 @@
package com.sky.exception;
/**
*
*
*
* BaseException便
*/
public class DeletionNotAllowedException extends BaseException {
/**
*
* msg
*
* BaseException便
*
* @param msg
*/
public DeletionNotAllowedException(String msg) {
super(msg);
}
}

@ -0,0 +1,30 @@
package com.sky.exception;
/**
*
*
* BaseException便
*/
public class PasswordErrorException extends BaseException {
/**
*
* 使
*
*/
public PasswordErrorException() {
}
/**
*
* msg
* BaseException
* 便
*
* @param msg
*/
public PasswordErrorException(String msg) {
super(msg);
}
}

@ -0,0 +1,77 @@
package com.sky.json;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;
/**
* JacksonObjectMapperObjectMapperJavaJSONJackson
* JSONJava [JSONJava]JavaJSON [JavaJSON]
* JSONJava
*/
public class JacksonObjectMapper extends ObjectMapper {
/**
* LocalDate "yyyy-MM-dd"
* 便JSONJavaLocalDate
*/
public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
/**
* "yyyy-MM-dd HH:mm:ss" "yyyy-MM-dd HH:mm"LocalDateTime
* 便
*/
public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm";
/**
* LocalTime "HH:mm:ss"
* JSONJava
*/
public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";
/**
* JacksonObjectMapper
*/
public JacksonObjectMapper() {
super();
// 配置在接收到未知属性时不报异常的特性。
// 在JSON数据转换为Java对象时如果JSON中包含了Java对象对应类中不存在的属性默认情况下Jackson会抛出异常
// 通过设置此项为false使得在遇到这种情况时能够进行兼容处理避免因未知属性导致转换失败提高了对不同格式JSON数据的兼容性。
this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);
// 进一步设置反序列化时属性不存在的兼容处理。
// 确保在反序列化过程中即使遇到JSON中的属性在Java对象对应类里不存在的情况也能平稳进行处理不会因这种差异而中断转换流程
// 这是对反序列化兼容性的再次强化和上面的配置一起保障了在接收不同结构JSON数据时的稳健性。
this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
SimpleModule simpleModule = new SimpleModule()
// 为LocalDateTime类型添加反序列化器使用指定的日期时间格式由DEFAULT_DATE_TIME_FORMAT定义来解析JSON中的日期时间字符串将其转换为Java的LocalDateTime对象。
.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
// 为LocalDate类型添加反序列化器按照默认的日期格式DEFAULT_DATE_FORMAT把JSON中的日期字符串反序列化为Java的LocalDate对象。
.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
// 为LocalTime类型添加反序列化器依据默认的时间格式DEFAULT_TIME_FORMAT将JSON中的时间字符串转换为Java的LocalTime对象。
.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)))
// 为LocalDateTime类型添加序列化器将Java的LocalDateTime对象按照指定的日期时间格式DEFAULT_DATE_TIME_FORMAT转换为JSON中的日期时间字符串进行输出。
.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
// 为LocalDate类型添加序列化器把Java的LocalDate对象依照默认的日期格式DEFAULT_DATE_FORMAT序列化为JSON中的日期字符串。
.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
// 为LocalTime类型添加序列化器使用默认的时间格式DEFAULT_TIME_FORMAT将Java的LocalTime对象转换为JSON中的时间字符串方便在JSON数据中呈现。
.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
// 注册功能模块通过注册这个自定义的SimpleModule使得添加的针对时间类型的序列化器和反序列化器生效
// 同时也可以在后续根据需要添加更多自定义的序列化器和反序列化器扩展该对象映射器的功能以满足不同业务场景下对JSON与Java对象转换的特殊要求。
this.registerModule(simpleModule);
}
}

@ -0,0 +1,74 @@
package com.sky.properties;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* WeChatProperties便
* 使Springapplication.propertiesapplication.yml便使
*/
@Component
@ConfigurationProperties(prefix = "sky.wechat")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WeChatProperties {
/**
* appid
* appid
*/
private String appid;
/**
*
* 访access token访
*/
private String secret;
/**
*
* 退
*/
private String mchid;
/**
* APIAPI
* 使
*/
private String mchSerialNo;
/**
*
* 使
*/
private String privateKeyFilePath;
/**
*
* 使使使
*/
private String apiV3Key;
/**
*
*
*/
private String weChatPayCertFilePath;
/**
* URL
* 便
*/
private String notifyUrl;
/**
* 退退退URL
* 退退退
*/
private String refundNotifyUrl;
}

@ -0,0 +1,205 @@
package com.sky.utils;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* HttpClientUtilHttpJava便HTTPGETPOST
* HTTP使便HTTP
*/
public class HttpClientUtil {
/**
* 55 * 1000HTTP
*
*/
static final int TIMEOUT_MSEC = 5 * 1000;
/**
* GETURLGET
*
* @param url url访API
* @param paramMap Map便
* @return JSONHTML
*/
public static String doGet(String url, Map<String, String> paramMap) {
// 创建Httpclient对象通过HttpClients.createDefault()方法获取默认配置的可关闭的HttpClient实例用于后续发起HTTP请求它是整个请求操作的基础客户端对象。
CloseableHttpClient httpClient = HttpClients.createDefault();
String result = "";
CloseableHttpResponse response = null;
try {
// 创建URIBuilder对象用于构建完整的URI统一资源标识符可以方便地在给定基础URL的基础上添加各种参数构造出符合要求的请求地址。
URIBuilder builder = new URIBuilder(url);
if (paramMap!= null) {
// 遍历请求参数Map将每个参数添加到URIBuilder中使其构建的URI包含相应的查询参数按照参数名和参数值的对应关系进行添加形成完整的带参请求地址。
for (String key : paramMap.keySet()) {
builder.addParameter(key, paramMap.get(key));
}
}
// 根据构建好的URIBuilder生成最终的URI对象该对象完整地描述了请求的目标资源位置及相关参数信息。
URI uri = builder.build();
// 创建GET请求对象使用生成的URI来初始化HttpGet实例明确此次请求的方式为GET以及请求的具体目标地址。
HttpGet httpGet = new HttpGet(uri);
// 发送请求通过之前创建的HttpClient实例执行HttpGet请求获取服务器返回的响应对象CloseableHttpResponse此对象包含了响应的状态码、响应头以及响应体等重要信息。
response = httpClient.execute(httpGet);
// 判断响应状态获取响应的状态码若状态码为200表示请求成功此时将响应体内容通过EntityUtils.toString方法指定编码为"UTF-8"读取出来赋值给result变量作为最终的响应结果返回若状态码不是200则返回空字符串。
if (response.getStatusLine().getStatusCode() == 200) {
result = EntityUtils.toString(response.getEntity(), "UTF-8");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 关闭响应对象,释放相关资源,避免资源泄漏,无论请求是否成功都需要执行此操作。
response.close();
// 关闭HttpClient对象释放其占用的网络连接等资源确保程序的资源管理良好。
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
/**
* POSTPOSTURLPOSTIO
*
* @param url URLGETurl
* @param paramMap MapPOST
* @return POST
* @throws IOException I/O
*/
public static String doPost(String url, Map<String, String> paramMap) throws IOException {
// 创建Httpclient对象获取默认配置的可关闭的HttpClient实例用于后续发起HTTP的POST请求操作作为请求的客户端基础对象。
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = null;
String resultString = "";
try {
// 创建Http Post请求对象使用给定的URL初始化HttpPost实例明确此次请求的方式为POST以及请求的目标地址后续将在此基础上添加请求参数等内容。
HttpPost httpPost = new HttpPost(url);
// 创建参数列表若传入的请求参数Map不为空则遍历该Map将每个参数转换为NameValuePair对象并添加到List中NameValuePair用于表示键值对形式的参数方便后续构建表单形式的请求实体。
if (paramMap!= null) {
List<NameValuePair> paramList = new ArrayList<>();
for (Map.Entry<String, String> param : paramMap.entrySet()) {
paramList.add(new BasicNameValuePair(param.getKey(), param.getValue()));
}
// 模拟表单通过将参数列表转换为UrlEncodedFormEntity对象来构建表单形式的请求实体它会对参数进行适当的编码处理例如对中文等特殊字符进行URL编码符合HTTP表单提交的规范然后将该请求实体设置到HttpPost请求对象中使得请求携带相应的参数信息。
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);
httpPost.setEntity(entity);
}
// 设置请求配置通过调用builderRequestConfig方法构建请求配置对象并设置到HttpPost请求中该配置包含了连接超时时间、请求获取连接的超时时间以及套接字超时时间等设置确保请求在合理的时间范围内进行避免长时间等待。
httpPost.setConfig(builderRequestConfig());
// 执行http请求使用HttpClient实例执行HttpPost请求获取服务器返回的响应对象CloseableHttpResponse其中包含了响应的各种关键信息如状态码、响应头和响应体等。
response = httpClient.execute(httpPost);
// 将响应体内容通过EntityUtils.toString方法指定编码为"UTF-8"读取出来赋值给resultString变量作为最终的响应结果返回若响应体为空或者读取出现异常等情况会按照相应逻辑处理。
resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
} catch (Exception e) {
throw e;
} finally {
try {
// 关闭响应对象,释放相关资源,确保资源正确回收,避免资源泄漏,无论请求是否成功都需要执行此操作。
response.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return resultString;
}
/**
* POSTJSONPOSTURLPOSTJSONIO
*
* @param url URLPOSTurl
* @param paramMap MapJSONJSON便JSONPOST
* @return JSONPOSTJSON
* @throws IOException JSONI/O
*/
public static String doPost4Json(String url, Map<String, String> paramMap) throws IOException {
// 创建Httpclient对象获取默认配置的可关闭的HttpClient实例作为发起HTTP的JSON格式POST请求的客户端基础对象。
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = null;
String resultString = "";
try {
// 创建Http Post请求对象使用给定的URL初始化HttpPost实例明确此次请求的方式为POST以及请求的目标地址后续在此基础上构建JSON格式的请求数据。
HttpPost httpPost = new HttpPost(url);
if (paramMap!= null) {
// 构造json格式数据通过遍历请求参数Map将每个参数添加到JSONObject中形成一个JSON格式的对象其中参数名作为JSON对象的属性名参数值作为对应属性的值方便以JSON格式向服务器传递数据符合现在很多基于RESTful API等交互中常用的JSON数据传输规范。
JSONObject jsonObject = new JSONObject();
for (Map.Entry<String, String> param : paramMap.entrySet()) {
jsonObject.put(param.getKey(), param.getValue());
}
// 创建StringEntity对象将JSON对象转换为字符串形式并指定编码为"utf-8",然后设置其内容编码和数据类型(设置为"application/json"表明这是一个JSON格式的数据最后将该请求实体设置到HttpPost请求对象中使得请求携带JSON格式的参数信息。
StringEntity entity = new StringEntity(jsonObject.toString(), "utf-8");
// 设置请求编码,明确请求实体的编码方式为"utf-8",确保数据在传输过程中的编码一致性,便于服务器正确解析接收到的数据。
entity.setContentEncoding("utf-8");
// 设置数据类型,将请求实体的数据类型设置为"application/json"告知服务器此次请求发送的数据是JSON格式的方便服务器按照相应的解析方式处理接收到的数据。
entity.setContentType("application/json");
httpPost.setEntity(entity);
}
// 设置请求配置调用builderRequestConfig方法构建请求配置对象并设置到HttpPost请求中该配置包含了连接超时时间、请求获取连接的超时时间以及套接字超时时间等设置保证请求能在合理的时间范围内完成避免因网络等问题导致请求长时间无响应。
httpPost.setConfig(builderRequestConfig());
// 执行http请求使用HttpClient实例执行HttpPost请求获取服务器返回的响应对象CloseableHttpResponse该对象包含了响应的状态码、响应头以及响应体等重要信息用于后续获取响应结果。
response = httpClient.execute(httpPost);
// 将响应体内容通过EntityUtils.toString方法指定编码为"UTF-8"读取出来赋值给resultString变量作为最终的响应结果返回若响应体为空或者读取出现异常等情况会按照相应逻辑处理。
resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
} catch (Exception e) {
throw e;
} finally {
try {
// 关闭响应对象,释放相关资源,避免资源泄漏,无论请求是否成功都需要执行此操作。
response.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return resultString;
}
/**
* RequestConfig使TIMEOUT_MSEC5
* HTTPHttpGetHttpPost
*
* @return RequestConfig使
*/
private static RequestConfig builderRequestConfig() {
return RequestConfig.custom()
.setConnectTimeout(TIMEOUT_MSEC)
.setConnectionRequestTimeout(TIMEOUT_MSEC)
.setSocketTimeout(TIMEOUT_MSEC).build();
}
}
Loading…
Cancel
Save