搭建一个Java项目可直接拿去使用的通用工具类
1、通用枚举类import lombok.Getter;
/**
* @Description 状态码定义约束,共6位数,前三位代表服务,后3位代表接口
* 比如 商品服务210,购物车是220、用户服务230,403代表权限
**/
public enum BizCodeEnum {
/**
* 短链分组
*/
GROUP_REPEAT(23001, "分组名重复"),
GROUP_OPER_FAIL(23503, "分组名操作失败"),
GROUP_NOT_EXIST(23404, "分组不存在"),
/**
* 验证码
*/
CODE_TO_ERROR(240001, "接收号码不合规"),
CODE_LIMITED(240002, "验证码发送过快"),
CODE_ERROR(240003, "验证码错误"),
CODE_CAPTCHA_ERROR(240101, "图形验证码错误"),
/**
* 账号
*/
ACCOUNT_REPEAT(250001, "账号已经存在"),
ACCOUNT_UNREGISTER(250002, "账号不存在"),
ACCOUNT_PWD_ERROR(250003, "账号或者密码错误"),
ACCOUNT_UNLOGIN(250004, "账号未登录"),
/**
* 短链
*/
SHORT_LINK_NOT_EXIST(260404, "短链不存在"),
/**
* 订单
*/
ORDER_CONFIRM_PRICE_FAIL(280002, "创建订单-验价失败"),
ORDER_CONFIRM_REPEAT(280008, "订单恶意-重复提交"),
ORDER_CONFIRM_TOKEN_EQUAL_FAIL(280009, "订单令牌缺少"),
ORDER_CONFIRM_NOT_EXIST(280010, "订单不存在"),
/**
* 支付
*/
PAY_ORDER_FAIL(300001, "创建支付订单失败"),
PAY_ORDER_CALLBACK_SIGN_FAIL(300002, "支付订单回调验证签失败"),
PAY_ORDER_CALLBACK_NOT_SUCCESS(300003, "支付宝回调更新订单失败"),
PAY_ORDER_NOT_EXIST(300005, "订单不存在"),
PAY_ORDER_STATE_ERROR(300006, "订单状态不正常"),
PAY_ORDER_PAY_TIMEOUT(300007, "订单支付超时"),
/**
* 流控操作
*/
CONTROL_FLOW(500101, "限流控制"),
CONTROL_DEGRADE(500201, "降级控制"),
CONTROL_AUTH(500301, "认证控制"),
/**
* 流量包操作
*/
TRAFFIC_FREE_NOT_EXIST(600101, "免费流量包不存在,联系客服"),
TRAFFIC_REDUCE_FAIL(600102, "流量不足,扣减失败"),
TRAFFIC_EXCEPTION(600103, "流量包数据异常,用户无流量包"),
/**
* 通用操作码
*/
OPS_REPEAT(110001, "重复操作"),
OPS_NETWORK_ADDRESS_ERROR(110002, "网络地址错误"),
/**
* 文件相关
*/
FILE_UPLOAD_USER_IMG_FAIL(700101, "用户头像文件上传失败");
@Getter
private String message;
@Getter
private int code;
private BizCodeEnum(int code, String message) {
this.code = code;
this.message = message;
}
}全局非常类
import lombok.Data;
import net.xdclass.enums.BizCodeEnum;
@Data
public class BizException extends RuntimeException {
private int code;
private String msg;
public BizException(Integer code, String message) {
super(message);
this.code = code;
this.msg = message;
}
public BizException(BizCodeEnum bizCodeEnum) {
super(bizCodeEnum.getMessage());
this.code = bizCodeEnum.getCode();
this.msg = bizCodeEnum.getMessage();
}
}自定义非常处置惩罚器
import lombok.extern.slf4j.Slf4j;
import net.xdclass.utils.JsonData;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* 自定义异常处理器
*/
@ControllerAdvice
@Slf4j
public class CustomExceptionHandler {
@ExceptionHandler(value = Exception.class)
@ResponseBody
public JsonData handler(Exception e) {
if (e instanceof BizException) {
BizException bizException = (BizException) e;
log.error("[业务异常]{}",e);
return JsonData.buildCodeAndMsg(bizException.getCode(),bizException.getMsg());
}else {
log.error("[系统异常]{}",e);
return JsonData.buildError("系统异常");
}
}
}2、通用工具类
import lombok.extern.slf4j.Slf4j;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.PrintWriter;import java.net.InetAddress;import java.net.UnknownHostException;import java.security.MessageDigest;import java.util.*;@Slf4jpublic class CommonUtil { /** * 获取ip * * @param request * @return */ public static String getIpAddr(HttpServletRequest request) { String ipAddress = null; try { ipAddress = request.getHeader("x-forwarded-for"); if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("Proxy-Client-IP"); } if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("WL-Proxy-Client-IP"); } if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getRemoteAddr(); if (ipAddress.equals("127.0.0.1")) { // 根据网卡取本机设置的IP InetAddress inet = null; try { inet = InetAddress.getLocalHost(); } catch (UnknownHostException e) { e.printStackTrace(); } ipAddress = inet.getHostAddress(); } } // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length() // = 15 if (ipAddress.indexOf(",") > 0) { ipAddress = ipAddress.substring(0, ipAddress.indexOf(",")); } } } catch (Exception e) { ipAddress = ""; } return ipAddress; } /** * 获取全部请求头 * * @param request * @return */ public static Map getAllRequestHeader(HttpServletRequest request) { Enumeration headerNames = request.getHeaderNames(); Map map = new HashMap(); while (headerNames.hasMoreElements()) { String key = (String) headerNames.nextElement(); //根据名称获取请求头的值 String value = request.getHeader(key); map.put(key, value); } return map; } /** * MD5加密 * * @param data * @return */ public static String MD5(String data) { try { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] array = md.digest(data.getBytes("UTF-8")); StringBuilder sb = new StringBuilder(); for (byte item : array) { sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3)); } return sb.toString().toUpperCase(); } catch (Exception exception) { } return null; } /** * 获取验证码随机数 * * @param length * @return */ public static String getRandomCode(int length) { String sources = "0123456789"; Random random = new Random(); StringBuilder sb = new StringBuilder(); for (int j = 0; j < length; j++) { sb.append(sources.charAt(random.nextInt(9))); } return sb.toString(); } /** * 获取当前时间戳 * * @return */ public static long getCurrentTimestamp() { return System.currentTimeMillis(); } /** * 天生uuid * * @return */ public static String generateUUID() { return UUID.randomUUID().toString().replaceAll("-", "").substring(0, 32); } /** * 获取随机长度的串 * * @param length * @return */ private static final String ALL_CHAR_NUM = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; public static String getStringNumRandom(int length) { //天生随机数字和字母, Random random = new Random(); StringBuilder saltString = new StringBuilder(length); for (int i = 1; i
页:
[1]