参数校验器
工具说明
定义统一异常处理器
这里只处理IllegalArgumentException和MethodArgumentNotValidException
本文虽只用到了IllegalArgumentException但是也是对验证码文章中的参数组序(CPGroup)接口的补充,因此保留了MethodArgumentNotValidException
java
import com.lh.api.ApiResult;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
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.RestControllerAdvice;
import java.util.List;
/**
* @ClassName CommonExceptionHandler
* @Author liupengxiang
* @Date 2023/6/29 13:57
* @Description 统一异常处理类
*/
@RestControllerAdvice
public class CommonExceptionHandler {
@ExceptionHandler(IllegalArgumentException.class)
@ResponseBody
public ApiResult<?> illegalArgumentExceptionHandler(IllegalArgumentException illegalArgumentException) {
illegalArgumentException.printStackTrace();
return ApiResult.build(500, illegalArgumentException.getMessage());
}
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public ApiResult<?> exceptionHandler(MethodArgumentNotValidException exception) {
BindingResult bindingResult = exception.getBindingResult();
// 判断异常中是否有错误信息,如果存在就使用异常中的消息,否则使用默认消息
if (bindingResult.hasErrors()) {
List<ObjectError> errors = bindingResult.getAllErrors();
if (!errors.isEmpty()) {
// 列出全部错误参数
FieldError fieldError = (FieldError) errors.get(0);
return ApiResult.build(500,fieldError.getDefaultMessage());
}
}
return ApiResult.build(500,"参数异常");
}
}工具类
java
import com.lautrans.exception.InventoryNotEnoughException;
import org.springframework.util.ObjectUtils;
/**
* @ClassName ParamsChecker
* @Author liupengxiang
* @Date 2023/7/11 14:55
* @Description 参数校验器
*/
@Component
public class ParamsChecker {
private static final Integer INIT_SERIAL = 1;
private static final Integer END_SERIAL = 2;
/**
* 参数校验
* @param elements 参数 格式: 参数名,参数,参数名,参数...
*/
public static void check(Object... elements) {
var serial = INIT_SERIAL;
Object parameter = null;
for (Object element : elements) {
if (serial.equals(INIT_SERIAL)) {
parameter = element;
}
if (serial.equals(END_SERIAL)) {
if (ObjectUtils.isEmpty(element)) {
throw new IllegalArgumentException(parameter.toString());
}
}
serial ++;
if (serial > END_SERIAL) {
serial = INIT_SERIAL;
parameter = null;
}
}
}
}使用
参数是成对的第一个参数为参数说明,第二个参数为参数名
java
ParamsChecker.check("活动id不能为空",actId,"规格id不能为空",customId);