@ControllerAdvice
@ResponseBody
@Slf4j
public class GlobalExceptionHandler {
@ExceptionHandler(value = Exception.class)
public Result> exceptionHandler(HttpServletRequest request, Exception e) {
Result> result = new Result<>();
//绑定异常是需要明确提示给用户的
if (e instanceof MethodArgumentNotValidException) {
MethodArgumentNotValidException methodArgumentNotValidException = (MethodArgumentNotValidException) e;
log.error("create salt or password is error.", methodArgumentNotValidException);
result.setCode(MemberEnum.SYSTEM_EXCEPTION.getCode());
result.setMessage(Objects.requireNonNull(
methodArgumentNotValidException.getBindingResult().getFieldError()
).getDefaultMessage());
} else if (e instanceof BindException) {
BindException bindException = (BindException) e;
log.error("create salt or password is error.", bindException);
result.setCode(MemberEnum.SYSTEM_EXCEPTION.getCode());
result.setMessage(Objects.requireNonNull(bindException.getFieldError()).getDefaultMessage());
} else if (e instanceof NoSuchAlgorithmException) {
log.error("create salt or password is error.", e);
result.setMessage(e.getMessage());
result.setCode((MemberEnum.SYSTEM_EXCEPTION.getCode()));
} else {
//不是上述异尝返回自定义code和message
result.setMessage(MemberEnum.SYSTEM_EXCEPTION.getMessage());
result.setCode(MemberEnum.SYSTEM_EXCEPTION.getCode());
}
return result;
}
}