package com.isu.gaswellwatch.exception; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; @Data @AllArgsConstructor @EqualsAndHashCode(callSuper = true) public class BusinessException extends RuntimeException { /** *
  • 日志
  • */ private static Logger logger = LoggerFactory.getLogger(BusinessException.class); /** *
  • 状态码
  • */ private Integer code = 500; /** *
  • 字符串错误信息(和i18n无关)
  • */ private String message; /** * 国际化文件中需要被替换的字符集合 */ private List replaceCharacters = null; public BusinessException(int code, String message) { this.code = code; this.message = message; } /** * 默认构造方法 */ public BusinessException() { super(); } /** * 重载构造函数 * * @param message */ public BusinessException(String message) { this.message = message; } /** * 重载构造函数 * * @param message 消息编码 * @param replaceCharacters 国际化文件中需要被替换的字符串集合 */ public BusinessException(String message, List replaceCharacters) { this.message = message; this.replaceCharacters = replaceCharacters; } /** * 重载构造函数 * * @param message 消息编码 * @param replaceCharacters 国际化文件中需要被替换的字符串集合 */ public BusinessException(String message, String... replaceCharacters) { this.message = message; if (replaceCharacters != null && replaceCharacters.length > 0) { this.replaceCharacters = new ArrayList<>(); for (String replaceCharacter : replaceCharacters) { this.replaceCharacters.add(replaceCharacter); } } } /** * 构造方法 * * @param message 消息编码 * @param cause 异常原因 */ public BusinessException(String message, Throwable cause) { super(message, cause); this.message = message; } /** * 重载构造函数 * * @param message 消息编码 * @param replaceCharacters 国际化文件中需要被替换的字符串集合 * @param cause 错误原因 */ public BusinessException(String message, List replaceCharacters, Throwable cause) { super(message, cause); this.message = message; this.replaceCharacters = replaceCharacters; } /** * 获得出错信息. 读取i18N properties文件中 messageCode对应的message,并组合参数获得i18n的出错信息. * * @return 返回 message */ @Override public String getMessage() { logger.debug("businessException code:" + message); // 否则用messageCode查询Properties文件获得出错信息 String result = null; // message = "Message Code is: " + messageCode + ", but can't get the message of the Message Code"; result = this.message; // 是否有需要替换的字符 if ((replaceCharacters != null) && (replaceCharacters.size() > 0)) { for (int i = 0; i < replaceCharacters.size(); i++) { String tempChar = "{" + i + "}"; if (result.indexOf(tempChar) != -1) { result = result.replace(tempChar, replaceCharacters.get(i)); } } } return result; } }