本页目录
- 前置知识
- 操作
Java项目开发我们会遇到大量的条件判断。我们频繁的写if条件看起来不够优雅,于是就出现断言工具,一行解决我们的条件判断的问题。
前置知识
不会的自行学习补充哦!
1、自定义异常:https://www.zanglikun.com/2299.html#自定义异常
2、全局异常捕获:https://cloud.tencent.com/developer/article/1936712
操作
1、定义一个异常
代码语言:javascript复制public class BusinessException extends RuntimeException {
public BusinessException(String message) {
super(message);
}
}
2、编写全局异常捕获
代码语言:javascript复制import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.CannotAcquireLockException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import javax.servlet.http.HttpServletRequest;
/**
* @Author :zanglk
* @DateTime :2021/3/11 13:54
* @Description :AOP 思想 统一全局异常处理。MVC提供一个@ControllerAdvice注解去处理异常
* @Notes :
* 特别说明
* 1、@ExceptionHandler支持多个异常数组。
* 2、@ResponseStatus(value = HttpStatus.BAD_REQUEST) 用于指定响应码。当然也可以在方法的返回值设为ResponseEntity,在此对象指定响应吗。
* 3、相同异常被捕获时,捕获方法在前面优先捕获。
*/
@ControllerAdvice // 如果需要关闭全局异常拦截,直接注释此注解即可
public class GlobalExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
/**
* 自定义异常捕获
*
* @param req 请求:可以记录一些穿参的内容,这里没用到。
* @return 返回一个自定义字符串
*/
@ExceptionHandler(value = {BusinessException.class, Exception.class})
@ResponseBody
@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR) // 错误码:500
public String BusinessException(HttpServletRequest req, BusinessException e) {
logger.error("接收了一个业务操作的异常{}", e.getMessage());
return "宝贝,你被我拦截了!";
}
}
3、编写AssertUtils工具
代码语言:javascript复制import org.apache.commons.lang3.StringUtils;
import org.springframework.lang.Nullable;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import java.util.Collection;
/**
* @Author :zanglk
* @DateTime :2022/11/9 00:47
* @Description :本工具最初目的是减少手写if判断,为了结合更好的业务操作,添加异常类,然后全局异常管理。
* @Notes :To change this template:Click IDEA-Preferences to search 'File Templates'
*/
public class AssertUtils {
/**
* 判断对象是非空,如果对象是空,就抛异常
*
* @param object 判断对象
* @param errorMessage 异常提示信息
*/
public static void notNull(@Nullable Object object, String errorMessage) {
if (null != object) {
throw new BusinessException(errorMessage);
}
}
/**
* 判读对象是不是空,如果是非空,就抛异常
*
* @param object 判断对象
* @param errorMessage 异常提示信息
*/
public static void isNull(@Nullable Object object, String errorMessage) {
if (null != object) {
throw new BusinessException(errorMessage);
}
}
/**
* 判断是否是真,如果对象是false,就抛出异常
*
* @param expression 判断对象
* @param errorMessage 异常提示信息
*/
public static void isTrue(boolean expression, String errorMessage) {
if (!expression) {
throw new BusinessException(errorMessage);
}
}
/**
* 判断是否是真,如果对象是false,就抛出异常。
*
* @param expression 判断对象
* @param errorMessage 异常提示信息
*/
public static void isTrue(Boolean expression, String errorMessage) {
if (Boolean.FALSE.equals(expression)) {
throw new BusinessException(errorMessage);
}
}
/**
* 判断集合是否有数据,如果没有数据,就抛出异常。
*
* @param collection 集合对象
* @param errorMessage 错误提示信息
*/
public static void notEmpty(@Nullable Collection<?> collection, String errorMessage) {
if (CollectionUtils.isEmpty(collection)) {
throw new BusinessException(errorMessage);
}
}
/**
* 判断集合是否有数据,如果没有数据,就抛出异常。 这里利用的是Spring自带的工具
*
* @param array 数组对象
* @param errorMessage 错误提示信息
*/
public static void notEmpty(@Nullable Object[] array, String errorMessage) {
if (ObjectUtils.isEmpty(array)) {
throw new BusinessException(errorMessage);
}
}
/**
* 判断字符串是否有效是真实的且非空格,如果无法满足,就抛出异常。 这里利用的是org.apache.commons.lang3的二次封装。
*
* @param word 数组对象
* @param errorMessage 错误提示信息
*/
public static void isNotBlank(String word, String errorMessage) {
/**
* StringUtils.isBlank(null) = true
* StringUtils.isBlank("") = true
* StringUtils.isBlank(" ") = true
* StringUtils.isBlank("bob") = false
* StringUtils.isBlank(" bob ") = false
*/
if (StringUtils.isBlank(word)) {
throw new BusinessException(errorMessage);
}
}
}
4、测试
代码语言:javascript复制@PostMapping("assert")
@ResponseBody
public String testAssertUtils(){
AssertUtils.isNotBlank(" ", "XX 不允许为Blank");
return "方法结束!";
}
控制态输出
代码语言:javascript复制2022-11-09 01:59:41.331 ERROR 86029 --- [nio-8081-exec-1] c.z.s.handler.GlobalExceptionHandler : 接收了一个业务操作的异常XX 不允许为Blank
完成