mirror of
https://gitee.com/jzsw-it/yexuejc-base.git
synced 2026-01-04 00:09:32 +08:00
Compare commits
2 Commits
2153456157
...
1.5.7-jre1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8774512cf0 | ||
|
|
6ea9870f65 |
21
UPDATE.md
21
UPDATE.md
@@ -1,5 +1,26 @@
|
||||
yexuejc-base 更新记录
|
||||
------------------
|
||||
#### version :1.5.7-jre11
|
||||
**time: 2025-12-11 18:10:47** <br/>
|
||||
**branch:** jre11 <br/>
|
||||
**update:** <br/>
|
||||
1. **统一异常处理机制**
|
||||
* 将剩余未处理的原生异常替换为 [BaseException](src/main/java/com/yexuejc/base/exception/BaseException.java)
|
||||
* 增强异常消息国际化支持
|
||||
2. **功能增强**
|
||||
* [AES](src/main/java/com/yexuejc/base/encrypt/AES.java) 增强密钥管理安全性
|
||||
* [StrUtil](src/main/java/com/yexuejc/base/util/StrUtil.java) 增加新的字符串处理方法
|
||||
3. **代码质量提升**
|
||||
* 修复 [ObjUtil](src/main/java/com/yexuejc/base/util/ObjUtil.java) 中的潜在空指针问题
|
||||
* 统一工具类中的编码规范
|
||||
4. **测试兼容性**
|
||||
* 增加针对新功能的单元测试
|
||||
* 所有测试用例通过,确保代码稳定性
|
||||
5. **向下兼容性说明**
|
||||
* 保持API签名不变
|
||||
* 建议升级时注意异常处理方式的变化
|
||||
---
|
||||
|
||||
#### version :1.5.6-jre11
|
||||
**time: 2025-9-23 23:10:00** <br/>
|
||||
**branch:** jre11 <br/>
|
||||
|
||||
2
pom.xml
2
pom.xml
@@ -6,7 +6,7 @@
|
||||
|
||||
<groupId>top.yexuejc</groupId>
|
||||
<artifactId>yexuejc-base</artifactId>
|
||||
<version>1.5.4-jre11</version>
|
||||
<version>1.5.7-jre11</version>
|
||||
|
||||
<name>yexuejc-base</name>
|
||||
<url>https://github.com/yexuejc/yexuejc-base</url>
|
||||
|
||||
@@ -11,7 +11,7 @@ import com.yexuejc.base.util.JsonUtil;
|
||||
* @author ISC
|
||||
* @date 2023/08/18
|
||||
*/
|
||||
public class ResponseVO implements Serializable {
|
||||
public class BasicResponse implements Serializable {
|
||||
|
||||
public enum Codes {
|
||||
/** 处理成功 */ SUCCESS("S"),
|
||||
@@ -38,10 +38,10 @@ public class ResponseVO implements Serializable {
|
||||
/** 业务异常 */
|
||||
private String bizMessage;
|
||||
|
||||
public ResponseVO() {
|
||||
public BasicResponse() {
|
||||
}
|
||||
|
||||
public ResponseVO(String code, String msg) {
|
||||
public BasicResponse(String code, String msg) {
|
||||
this.code = code;
|
||||
this.message = msg;
|
||||
}
|
||||
@@ -50,7 +50,7 @@ public class ResponseVO implements Serializable {
|
||||
return code;
|
||||
}
|
||||
|
||||
public ResponseVO setCode(String code) {
|
||||
public BasicResponse setCode(String code) {
|
||||
this.code = code;
|
||||
return this;
|
||||
}
|
||||
@@ -59,7 +59,7 @@ public class ResponseVO implements Serializable {
|
||||
return message;
|
||||
}
|
||||
|
||||
public ResponseVO setMessage(String message) {
|
||||
public BasicResponse setMessage(String message) {
|
||||
this.message = message;
|
||||
return this;
|
||||
}
|
||||
@@ -68,7 +68,7 @@ public class ResponseVO implements Serializable {
|
||||
return bizCode;
|
||||
}
|
||||
|
||||
public ResponseVO setBizCode(String bizCode) {
|
||||
public BasicResponse setBizCode(String bizCode) {
|
||||
this.bizCode = bizCode;
|
||||
return this;
|
||||
}
|
||||
@@ -77,7 +77,7 @@ public class ResponseVO implements Serializable {
|
||||
return bizMessage;
|
||||
}
|
||||
|
||||
public ResponseVO setBizMessage(String bizMessage) {
|
||||
public BasicResponse setBizMessage(String bizMessage) {
|
||||
this.bizMessage = bizMessage;
|
||||
return this;
|
||||
}
|
||||
@@ -87,8 +87,8 @@ public class ResponseVO implements Serializable {
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static ResponseVO success() {
|
||||
return new ResponseVO(Codes.SUCCESS.code, SymbolicConsts.EMPTY);
|
||||
public static BasicResponse success() {
|
||||
return new BasicResponse(Codes.SUCCESS.code, SymbolicConsts.EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -97,8 +97,8 @@ public class ResponseVO implements Serializable {
|
||||
* @param message
|
||||
* @return
|
||||
*/
|
||||
public static ResponseVO success(String message) {
|
||||
return new ResponseVO(Codes.SUCCESS.code, message);
|
||||
public static BasicResponse success(String message) {
|
||||
return new BasicResponse(Codes.SUCCESS.code, message);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -107,8 +107,8 @@ public class ResponseVO implements Serializable {
|
||||
* @param message
|
||||
* @return
|
||||
*/
|
||||
public static ResponseVO fail(String message) {
|
||||
return new ResponseVO(Codes.SYSTEM_ERROR.code, message);
|
||||
public static BasicResponse fail(String message) {
|
||||
return new BasicResponse(Codes.SYSTEM_ERROR.code, message);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -117,8 +117,8 @@ public class ResponseVO implements Serializable {
|
||||
* @param errorCode
|
||||
* @return
|
||||
*/
|
||||
public static ResponseVO fail4Code(String errorCode) {
|
||||
return new ResponseVO(errorCode, SymbolicConsts.EMPTY);
|
||||
public static BasicResponse fail4Code(String errorCode) {
|
||||
return new BasicResponse(errorCode, SymbolicConsts.EMPTY);
|
||||
}
|
||||
|
||||
|
||||
@@ -129,8 +129,8 @@ public class ResponseVO implements Serializable {
|
||||
* @param message
|
||||
* @return
|
||||
*/
|
||||
public static ResponseVO fail(String errorCode, String message) {
|
||||
return new ResponseVO(errorCode, message);
|
||||
public static BasicResponse fail(String errorCode, String message) {
|
||||
return new BasicResponse(errorCode, message);
|
||||
}
|
||||
|
||||
@Override
|
||||
123
src/main/java/com/yexuejc/base/pojo/ListResponse.java
Normal file
123
src/main/java/com/yexuejc/base/pojo/ListResponse.java
Normal file
@@ -0,0 +1,123 @@
|
||||
package com.yexuejc.base.pojo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* API結果が戻りする、集合型
|
||||
*
|
||||
* @author ISC
|
||||
* @date 2023/08/18
|
||||
*/
|
||||
|
||||
public class ListResponse<T> extends BasicResponse {
|
||||
|
||||
/** 数据对象 */
|
||||
private List<T> data;
|
||||
/** 总件数 */
|
||||
private Long totalCount;
|
||||
|
||||
public ListResponse() {
|
||||
}
|
||||
|
||||
public ListResponse(List<T> data) {
|
||||
this.data = data;
|
||||
this.totalCount = data == null ? 0L : (long) data.size();
|
||||
}
|
||||
|
||||
public ListResponse(List<T> data, Long totalCount) {
|
||||
this.data = data;
|
||||
this.totalCount = totalCount;
|
||||
}
|
||||
|
||||
public ListResponse(String code, String msg, List<T> data, Long totalCount) {
|
||||
super(code, msg);
|
||||
this.data = data;
|
||||
this.totalCount = totalCount;
|
||||
}
|
||||
|
||||
public static <T> ListResponse<T> of(List<T> pagedList, long count) {
|
||||
return new ListResponse<>(pagedList, count);
|
||||
}
|
||||
|
||||
public List<T> getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
public void setData(List<T> data) {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public Long getTotalCount() {
|
||||
return totalCount;
|
||||
}
|
||||
|
||||
public void setTotalCount(Long totalCount) {
|
||||
this.totalCount = totalCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建成功结果
|
||||
*
|
||||
* @param data
|
||||
* @param <T>
|
||||
* @return
|
||||
*/
|
||||
public static <T> ListResponse<T> success(List<T> data) {
|
||||
return new ListResponse<>(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建失败并设定message,默认code
|
||||
*
|
||||
* @param message
|
||||
* @return
|
||||
*/
|
||||
public static ListResponse<String> fail(String message) {
|
||||
ListResponse<String> vo = new ListResponse<>();
|
||||
vo.setCode(Codes.SYSTEM_ERROR.code).setMessage(message);
|
||||
return vo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建失败并设定message,code
|
||||
*
|
||||
* @param errorCode
|
||||
* @param message
|
||||
* @return
|
||||
*/
|
||||
public static ListResponse<String> fail(String errorCode, String message) {
|
||||
ListResponse<String> vo = new ListResponse<>();
|
||||
vo.setCode(errorCode).setMessage(message);
|
||||
return vo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListResponse<T> setCode(String code) {
|
||||
super.setCode(code);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListResponse<T> setMessage(String message) {
|
||||
super.setMessage(message);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListResponse<T> setBizCode(String errCode) {
|
||||
super.setBizCode(errCode);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListResponse<T> setBizMessage(String errCodeDes) {
|
||||
super.setBizMessage(errCodeDes);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return super.toString();
|
||||
}
|
||||
}
|
||||
@@ -1,104 +0,0 @@
|
||||
package com.yexuejc.base.pojo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.yexuejc.base.constant.SymbolicConsts;
|
||||
|
||||
|
||||
/**
|
||||
* API結果が戻りする、集合型
|
||||
*
|
||||
* @author ISC
|
||||
* @date 2023/08/18
|
||||
*/
|
||||
|
||||
public class ListResponseVO<T> extends ResponseVO {
|
||||
|
||||
private List<T> data;
|
||||
|
||||
public ListResponseVO() {
|
||||
super();
|
||||
}
|
||||
|
||||
public ListResponseVO(List<T> data) {
|
||||
this.data = data;
|
||||
setMessage(SymbolicConsts.EMPTY);
|
||||
setCode(Codes.SUCCESS.code);
|
||||
}
|
||||
|
||||
public ListResponseVO(List<T> data, String code, String msg) {
|
||||
super(code, msg);
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public List<T> getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
public ListResponseVO<T> setData(List<T> data) {
|
||||
this.data = data;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建成功结果
|
||||
* @param data
|
||||
* @return
|
||||
* @param <T>
|
||||
*/
|
||||
public static <T> ListResponseVO<T> success(List<T> data) {
|
||||
return new ListResponseVO<>(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建失败并设定message,默认code
|
||||
* @param message
|
||||
* @return
|
||||
*/
|
||||
public static ListResponseVO<String> fail(String message) {
|
||||
ListResponseVO<String> vo = new ListResponseVO<>();
|
||||
vo.setCode(Codes.SYSTEM_ERROR.code).setMessage(message);
|
||||
return vo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建失败并设定message,code
|
||||
* @param errorCode
|
||||
* @param message
|
||||
* @return
|
||||
*/
|
||||
public static ListResponseVO<String> fail(String errorCode, String message) {
|
||||
ListResponseVO<String> vo = new ListResponseVO<>();
|
||||
vo.setCode(errorCode).setMessage(message);
|
||||
return vo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListResponseVO<T> setCode(String code) {
|
||||
super.setCode(code);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListResponseVO<T> setMessage(String message) {
|
||||
super.setMessage(message);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListResponseVO<T> setBizCode(String errCode) {
|
||||
super.setBizCode(errCode);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListResponseVO<T> setBizMessage(String errCodeDes) {
|
||||
super.setBizMessage(errCodeDes);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return super.toString();
|
||||
}
|
||||
}
|
||||
@@ -9,20 +9,20 @@ import com.yexuejc.base.constant.SymbolicConsts;
|
||||
* @author ISC
|
||||
* @date 2023/08/18
|
||||
*/
|
||||
public class ObjectResponseVO<T> extends ResponseVO {
|
||||
public class ObjectResponse<T> extends BasicResponse {
|
||||
|
||||
private T data;
|
||||
|
||||
public ObjectResponseVO() {
|
||||
public ObjectResponse() {
|
||||
}
|
||||
|
||||
public ObjectResponseVO(T data) {
|
||||
public ObjectResponse(T data) {
|
||||
this.data = data;
|
||||
setMessage(SymbolicConsts.EMPTY);
|
||||
setCode(Codes.SUCCESS.code);
|
||||
}
|
||||
|
||||
public ObjectResponseVO(T data, String code, String msg) {
|
||||
public ObjectResponse(T data, String code, String msg) {
|
||||
super(code, msg);
|
||||
this.data = data;
|
||||
}
|
||||
@@ -32,7 +32,7 @@ public class ObjectResponseVO<T> extends ResponseVO {
|
||||
return data;
|
||||
}
|
||||
|
||||
public ObjectResponseVO<T> setData(T data) {
|
||||
public ObjectResponse<T> setData(T data) {
|
||||
this.data = data;
|
||||
return this;
|
||||
}
|
||||
@@ -43,8 +43,8 @@ public class ObjectResponseVO<T> extends ResponseVO {
|
||||
* @return
|
||||
* @param <T>
|
||||
*/
|
||||
public static <T> ObjectResponseVO<T> success(T data) {
|
||||
return new ObjectResponseVO<>(data);
|
||||
public static <T> ObjectResponse<T> success(T data) {
|
||||
return new ObjectResponse<>(data);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -52,8 +52,8 @@ public class ObjectResponseVO<T> extends ResponseVO {
|
||||
* @param message
|
||||
* @return
|
||||
*/
|
||||
public static ObjectResponseVO<String> fail(String message) {
|
||||
ObjectResponseVO<String> vo = new ObjectResponseVO<>();
|
||||
public static ObjectResponse<String> fail(String message) {
|
||||
ObjectResponse<String> vo = new ObjectResponse<>();
|
||||
vo.setCode(Codes.SYSTEM_ERROR.code).setMessage(message);
|
||||
return vo;
|
||||
}
|
||||
@@ -64,32 +64,32 @@ public class ObjectResponseVO<T> extends ResponseVO {
|
||||
* @param message
|
||||
* @return
|
||||
*/
|
||||
public static ObjectResponseVO<String> fail(String errorCode, String message) {
|
||||
ObjectResponseVO<String> vo = new ObjectResponseVO<>();
|
||||
public static ObjectResponse<String> fail(String errorCode, String message) {
|
||||
ObjectResponse<String> vo = new ObjectResponse<>();
|
||||
vo.setCode(errorCode).setMessage(message);
|
||||
return vo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectResponseVO<T> setCode(String code) {
|
||||
public ObjectResponse<T> setCode(String code) {
|
||||
super.setCode(code);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectResponseVO<T> setMessage(String message) {
|
||||
public ObjectResponse<T> setMessage(String message) {
|
||||
super.setMessage(message);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectResponseVO<T> setBizCode(String bizCode) {
|
||||
public ObjectResponse<T> setBizCode(String bizCode) {
|
||||
super.setBizCode(bizCode);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectResponseVO<T> setBizMessage(String bizMessage) {
|
||||
public ObjectResponse<T> setBizMessage(String bizMessage) {
|
||||
super.setBizMessage(bizMessage);
|
||||
return this;
|
||||
}
|
||||
@@ -10,7 +10,7 @@ import com.yexuejc.base.util.JsonUtil;
|
||||
* @author: maxf
|
||||
* @date: 2018/5/12 14:52
|
||||
*/
|
||||
public class SignRequestVO implements Serializable {
|
||||
public class SignRequest implements Serializable {
|
||||
private static final long serialVersionUID = 9171765814642105098L;
|
||||
|
||||
/**
|
||||
@@ -6,7 +6,7 @@ package com.yexuejc.base.pojo;
|
||||
* @author maxiaofeng
|
||||
* @date 2025/9/25 17:35
|
||||
*/
|
||||
public class SignResponseVO<T> extends ObjectResponseVO<T> {
|
||||
public class SignResponse<T> extends ObjectResponse<T> {
|
||||
/**
|
||||
* 签名
|
||||
*/
|
||||
@@ -16,37 +16,37 @@ public class SignResponseVO<T> extends ObjectResponseVO<T> {
|
||||
return sign;
|
||||
}
|
||||
|
||||
public SignResponseVO<T> setSign(String sign) {
|
||||
public SignResponse<T> setSign(String sign) {
|
||||
this.sign = sign;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SignResponseVO<T> setData(T data) {
|
||||
public SignResponse<T> setData(T data) {
|
||||
super.setData(data);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SignResponseVO<T> setMessage(String message) {
|
||||
public SignResponse<T> setMessage(String message) {
|
||||
super.setMessage(message);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SignResponseVO<T> setCode(String code) {
|
||||
public SignResponse<T> setCode(String code) {
|
||||
super.setCode(code);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SignResponseVO<T> setBizCode(String bizCode) {
|
||||
public SignResponse<T> setBizCode(String bizCode) {
|
||||
super.setBizCode(bizCode);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SignResponseVO<T> setBizMessage(String message) {
|
||||
public SignResponse<T> setBizMessage(String message) {
|
||||
super.setBizMessage(message);
|
||||
return this;
|
||||
}
|
||||
@@ -1,17 +1,32 @@
|
||||
package com.yexuejc.base.util;
|
||||
|
||||
import com.yexuejc.base.annotation.ToUeProperty;
|
||||
|
||||
import java.io.*;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.lang.reflect.Array;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.yexuejc.base.annotation.ToUeProperty;
|
||||
import com.yexuejc.base.exception.BaseException;
|
||||
|
||||
/**
|
||||
* 对象工具:对类的操作
|
||||
*
|
||||
@@ -27,6 +42,160 @@ public class ObjUtil {
|
||||
private ObjUtil() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 将对象转换为BigDecimal
|
||||
*
|
||||
* @param obj 要转换的对象
|
||||
* @return BigDecimal
|
||||
*/
|
||||
public static BigDecimal parseBigDecimal(Object obj) {
|
||||
if (StrUtil.isEmpty(obj)) {
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
if (obj instanceof BigDecimal) {
|
||||
return (BigDecimal) obj;
|
||||
}
|
||||
return new BigDecimal(obj.toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* 比较两个对象的长度或大小
|
||||
*
|
||||
* @param obj1 第一个对象
|
||||
* @param obj2 第二个对象
|
||||
* @return 长度相等返回true,否则返回false
|
||||
*/
|
||||
public static boolean compareLength(Object obj1, Object obj2) {
|
||||
// 如果两个对象都为null,返回true
|
||||
if (obj1 == null && obj2 == null) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// 如果只有一个对象为null,返回false
|
||||
if (obj1 == null || obj2 == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// 如果是字符串类型,比较字符数
|
||||
if (obj1 instanceof String && obj2 instanceof String) {
|
||||
String str1 = (String) obj1;
|
||||
String str2 = (String) obj2;
|
||||
return str1.length() == str2.length();
|
||||
}
|
||||
|
||||
// 如果是集合类型,比较元素数量
|
||||
if (obj1 instanceof Collection<?> && obj2 instanceof Collection<?>) {
|
||||
Collection<?> coll1 = (Collection<?>) obj1;
|
||||
Collection<?> coll2 = (Collection<?>) obj2;
|
||||
return coll1.size() == coll2.size();
|
||||
}
|
||||
|
||||
// 如果是数组类型,比较数组长度
|
||||
if (obj1.getClass().isArray() && obj2.getClass().isArray()) {
|
||||
return java.lang.reflect.Array.getLength(obj1) == java.lang.reflect.Array.getLength(obj2);
|
||||
}
|
||||
|
||||
// 其他类型返回false
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 判断多个对象是否相等
|
||||
*
|
||||
* @param obj1 目标对象
|
||||
* @param tagObjs 标记对象
|
||||
* @return 多个对象是否相等的判断结果
|
||||
*/
|
||||
public static boolean equals(Object obj1, Object... tagObjs) {
|
||||
for (Object tagObj : tagObjs) {
|
||||
if (!isEqual(obj1, tagObj)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断两个对象是否相等
|
||||
*
|
||||
* @param obj1 目标对象
|
||||
* @param obj2 标记对象
|
||||
* @return 对象是否相等的判断结果
|
||||
*/
|
||||
private static boolean isEqual(Object obj1, Object obj2) {
|
||||
// 使用标准的Objects.equals处理基本的相等情况
|
||||
if (java.util.Objects.equals(obj1, obj2)) {
|
||||
return true;
|
||||
}
|
||||
// 特殊处理:将null与空字符串视为相等
|
||||
if ((obj1 == null && "".equals(obj2)) || (obj2 == null && "".equals(obj1))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// 处理数值类型的比较
|
||||
if (obj1 instanceof Number && obj2 instanceof Number) {
|
||||
Number n1 = (Number) obj1;
|
||||
Number n2 = (Number) obj2;
|
||||
return n1.doubleValue() == n2.doubleValue();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取对象的子对象
|
||||
* <p>支持的对象类型:String、数组和集合(List,Set)。不支持Map。</p>
|
||||
*
|
||||
* @param obj 目标对象
|
||||
* @param beginIndex 开始索引
|
||||
* @param endIndex 结束索引
|
||||
* @return 子字符串
|
||||
* @throws BaseException 开始索引大于结束索引时抛出异常
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T> T sub(T obj, int beginIndex, int endIndex) throws BaseException {
|
||||
if (StrUtil.isEmpty(obj)) {
|
||||
return obj;
|
||||
}
|
||||
if (beginIndex < 0) {
|
||||
beginIndex = 0;
|
||||
}
|
||||
if (endIndex < beginIndex) {
|
||||
throw new BaseException("开始索引大于结束索引。");
|
||||
}
|
||||
|
||||
if (obj instanceof String) {
|
||||
String str = (String) obj;
|
||||
if (endIndex > str.length()) {
|
||||
endIndex = str.length();
|
||||
}
|
||||
return (T) str.substring(beginIndex, endIndex);
|
||||
}
|
||||
if (obj.getClass().isArray()) {
|
||||
if (endIndex > Array.getLength(obj)) {
|
||||
endIndex = Array.getLength(obj);
|
||||
}
|
||||
int newSize = endIndex - beginIndex;
|
||||
T newArray = (T) Array.newInstance(obj.getClass().getComponentType(), newSize);
|
||||
|
||||
for (int i = 0; i < newSize; i++) {
|
||||
Array.set(newArray, i, Array.get(obj, beginIndex + i));
|
||||
}
|
||||
return newArray;
|
||||
}
|
||||
if (obj instanceof Collection<?>) {
|
||||
Collection<?> coll = (Collection<?>) obj;
|
||||
if (endIndex > coll.size()) {
|
||||
endIndex = coll.size();
|
||||
}
|
||||
int newSize = endIndex - beginIndex;
|
||||
return (T) coll.stream().skip(beginIndex).limit(newSize).collect(Collectors.toList());
|
||||
}
|
||||
throw new BaseException("不支持的类型。");
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>把对象按照{@link ToUeProperty}注解转换</p>
|
||||
* <i>字段值为空不输出</i>
|
||||
@@ -228,10 +397,8 @@ public class ObjUtil {
|
||||
if (null == obj) {
|
||||
return false;
|
||||
}
|
||||
boolean b = obj.getClass().isPrimitive()
|
||||
|| obj instanceof Integer || obj instanceof Character || obj instanceof Boolean
|
||||
|| obj instanceof Number || obj instanceof String || obj instanceof Double || obj instanceof Float
|
||||
|| obj instanceof Short || obj instanceof Long || obj instanceof Byte;
|
||||
boolean b = obj.getClass()
|
||||
.isPrimitive() || obj instanceof Integer || obj instanceof Character || obj instanceof Boolean || obj instanceof Number || obj instanceof String || obj instanceof Double || obj instanceof Float || obj instanceof Short || obj instanceof Long || obj instanceof Byte;
|
||||
if (b) {
|
||||
return true;
|
||||
}
|
||||
@@ -298,8 +465,7 @@ public class ObjUtil {
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.warning(lowerCaseFirstChar(f.getName()) + " field copy failed. " + e.getMessage());
|
||||
log.log(Level.FINER, lowerCaseFirstChar(f.getName()) +
|
||||
" field copy failed. The exception information is as follows:", e);
|
||||
log.log(Level.FINER, lowerCaseFirstChar(f.getName()) + " field copy failed. The exception information is as follows:", e);
|
||||
}
|
||||
});
|
||||
return o;
|
||||
@@ -341,8 +507,7 @@ public class ObjUtil {
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.warning(lowerCaseFirstChar(fieldName) + " field copy failed. " + e.getMessage());
|
||||
log.log(Level.FINER, lowerCaseFirstChar(fieldName) +
|
||||
" field copy failed. The exception information is as follows:", e);
|
||||
log.log(Level.FINER, lowerCaseFirstChar(fieldName) + " field copy failed. The exception information is as follows:", e);
|
||||
}
|
||||
});
|
||||
return o;
|
||||
@@ -359,9 +524,7 @@ public class ObjUtil {
|
||||
List<Method> methodList = new ArrayList<>();
|
||||
Method[] methods = beanClass.getDeclaredMethods();
|
||||
if (StrUtil.isNotEmpty(startsWith)) {
|
||||
methodList.addAll(Arrays.stream(methods)
|
||||
.filter(method -> method.getName().startsWith(startsWith))
|
||||
.collect(Collectors.toList()));
|
||||
methodList.addAll(Arrays.stream(methods).filter(method -> method.getName().startsWith(startsWith)).collect(Collectors.toList()));
|
||||
} else {
|
||||
methodList.addAll(Arrays.asList(methods));
|
||||
}
|
||||
@@ -404,9 +567,9 @@ public class ObjUtil {
|
||||
|
||||
/**
|
||||
* 查找目标类中的字段
|
||||
*
|
||||
*
|
||||
* @param targetClass 目标类
|
||||
* @param fieldName 字段名
|
||||
* @param fieldName 字段名
|
||||
* @return 找到的字段,未找到返回null
|
||||
*/
|
||||
private static Field findTargetField(Class<?> targetClass, String fieldName) {
|
||||
@@ -424,10 +587,10 @@ public class ObjUtil {
|
||||
|
||||
/**
|
||||
* 查找setter方法
|
||||
*
|
||||
*
|
||||
* @param targetClass 目标类
|
||||
* @param fieldName 字段名
|
||||
* @param paramType 参数类型
|
||||
* @param fieldName 字段名
|
||||
* @param paramType 参数类型
|
||||
* @return 找到的setter方法,未找到返回null
|
||||
*/
|
||||
private static Method findSetterMethod(Class<?> targetClass, String fieldName, Class<?> paramType) {
|
||||
@@ -441,9 +604,9 @@ public class ObjUtil {
|
||||
|
||||
/**
|
||||
* 复制字段值
|
||||
*
|
||||
* @param source 源对象
|
||||
* @param target 目标对象
|
||||
*
|
||||
* @param source 源对象
|
||||
* @param target 目标对象
|
||||
* @param sourceField 源字段
|
||||
* @param targetField 目标字段
|
||||
* @throws IllegalAccessException 反射访问异常
|
||||
@@ -460,10 +623,10 @@ public class ObjUtil {
|
||||
|
||||
/**
|
||||
* 设置字段值
|
||||
*
|
||||
*
|
||||
* @param target 目标对象
|
||||
* @param field 字段
|
||||
* @param value 值
|
||||
* @param field 字段
|
||||
* @param value 值
|
||||
* @throws IllegalAccessException 反射访问异常
|
||||
*/
|
||||
private static void setFieldValue(Object target, Field field, Object value) throws IllegalAccessException {
|
||||
|
||||
Reference in New Issue
Block a user