edi.rule.work.custom.JSRuleException Maven / Gradle / Ivy
package edi.rule.work.custom;
import edi.rule.extend.interfaces.IJSRuleHttpResponse;
import edi.rule.model.JSResult;
import edi.rule.work.constant.JSRuleJsonSign;
/**
* @apiNote Spring @Transactional 默认情况下只会回滚RuntimeException运行时异常,throw new Exception()默认不会回滚
* @apiNote 此时必须使用 rollbackFor 属性指定回滚的异常,JSRuleException继承的是RuntimeException运行时异常,因此不会出现此问题
* */
public final class JSRuleException extends RuntimeException{
/**
* 其子类为返回给调用端的消息对象>
* */
public IJSRuleHttpResponse response;
/**
*
写入到本地日志的消息,如xxx:{}>
* */
public String log;
/**
*
写入到本地日志的参数,如log.error("xxx:{}",params)>
* */
public Object[] params;
public JSRuleException() {super();}
/**
*
只支持后端做日志,调用端返回默认消息对象>
* */
public JSRuleException(Throwable cause, boolean enableSuppression, boolean writableStackTrace,String...log) {
super(jointMessage(log), cause, enableSuppression, writableStackTrace);
}
/**
*
只支持后端做日志,调用端返回默认消息对象>
* */
public JSRuleException(Throwable cause) {
super(cause);
this.log = cause.getMessage();
this.params = new Object[0];
}
/**
*
只支持后端做日志,调用端返回默认消息对象>
* */
public JSRuleException(Throwable cause,String...log) {
super(jointMessage(log),cause);
}
/**
*
支持后端做日志并且支持打印log参数行为,调用端返回默认消息对象>
*
使用该方法时需注意该异常是否在其它地方被捕获,这样有可能因为处理该异常的地方没有处理参数,进而导致参数为空{}>
* @param params 参考{@link JSRuleException#params}说明
* */
public JSRuleException(String log,Object...params){
super(log);
this.log = log;
this.params = params;
}
/**
*
支持后端做日志,同时支持自定义返回调用端日志对象>
* */
public JSRuleException(IJSRuleHttpResponse response, Throwable cause) {
this(cause);
this.response = response;
}
/**
*
只支持后端做日志,调用端返回默认消息对象>
* */
public JSRuleException(String...log) {
this(jointMessage(log),new Object[0]);
}
public JSRuleException(String message, Throwable cause) {
this(JSResult.fail(message),cause);
}
public JSRuleException(Integer code,String message, Throwable cause) {
this(JSResult.fail(code,message),cause);
}
/**
*
只支持调用端做日志,后端日志默认使用调用端日志>
* */
public JSRuleException(IJSRuleHttpResponse response) {
this(response, response.getMessage());
}
/**
*
支持后端做日志并且支持打印log参数行为,同时支持自定义返回调用端日志对象>
*
使用该方法时需注意该异常是否在其它地方被捕获,这样有可能因为处理该异常的地方没有处理参数,进而导致参数为空{}>
* @param params 参考{@link JSRuleException#params}说明
* */
public JSRuleException(IJSRuleHttpResponse response, String log, Object...params) {
this(log,params);
this.response = response;
}
public JSRuleException(Integer code, String message, String log, Object...params){
this(JSResult.fail(code,message),log,params);
}
public JSRuleException(String message, String log, Object...params){
this(JSResult.fail(message),log,params);
}
public static String jointMessage(String...message){
return String.join(JSRuleJsonSign.TIPS,message);
}
}