定义一个异常类:
/**
* 异常
*/
public class CheckException extends Exception {
public CheckException(String message) {
super(message);
}
}
定义一个aop(注解形式使用)
定义注解:
为什么这么定义的解释:https://blog.csdn.net/lgz0921/article/details/115183537?spm=1001.2014.3001.5501
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CheckUrl {
}
定义aop,这是一个判断传参是否为空的aop:
@Component
@Aspect
public class UrlCheckAspect {
//定义的注解的位置
@Before("@annotation(com.config.aop.CheckUrl)")
public void doInputCheckBefore(JoinPoint joinPoint) throws Throwable {
Object[] paramValues = joinPoint.getArgs();
String[] paramNames = ((CodeSignature)joinPoint.getSignature()).getParameterNames();
StrBuilder strBuilder = new StrBuilder();
for (int i = 0; i < paramNames.length; i++) {
if(paramValues[i] == null){
strBuilder.append(paramNames[i]).append("必传 ");
}
}
if (StringUtils.isNotEmpty(strBuilder.toString())) {
throw new CheckException(strBuilder.toString());
}
}
}
定义全局异常:
@ControllerAdvice
public class GlobalExceptionConfig {
@ResponseBody
@ExceptionHandler(CheckException.class)
//HttpResponse:格式化返回值的一个util
public HttpResponse<?> checkUrlException(CheckException e) {
return HttpResponse.fail(e.getMessage());
}
}
使用方式:
判断前端传过来的userId是否为空,必须加“required = false”,如果不加会被框架打回,得不到我们想要的结果
//判断前端传过来的userId是否为空
@CheckUrl
@GetMapping("/get_by_id")
public HttpResponse<?> getUserById(@RequestParam(required = false) Long userId) {
User byId = userService.getById(userId);
return byId == null ? HttpResponse.fail("用户不存在") : HttpResponse.success(byId);
}