后端
@Validated不定义分组时参数校验不通过给到前端的状态码默认为400;使用分组后会校验不通过的状态码会变成500;设置返回拦截器,方式如下:
@Slf4j
@ControllerAdvice
public class ValidatedExceptionHandler {
/**
* 处理@Validated参数校验失败异常
* @param exception 异常类
* @return 响应
*/
@ResponseBody
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MethodArgumentNotValidException.class)
public BaseResponse exceptionHandler(MethodArgumentNotValidException exception){
BindingResult result = exception.getBindingResult();
StringBuilder stringBuilder = new StringBuilder();
if (result.hasErrors()) {
List<ObjectError> errors = result.getAllErrors();
if (errors != null) {
errors.forEach(p -> {
FieldError fieldError = (FieldError) p;
log.warn("Bad Request Parameters: dto entity [{}],field [{}],message [{}]",fieldError.getObjectName(), fieldError.getField(), fieldError.getDefaultMessage());
stringBuilder.append(fieldError.getDefaultMessage());
});
}
}
return ResponseUtils.buildFailedResponse(stringBuilder.toString());
}
}
前端
/** 添加响应拦截器 **/
instance.interceptors.response.use(response => {
if (response.data.success === false) {
// message.error(response.data.errorMsg)
return Promise.resolve(response)
}
}, error => {
// 请求报错的回调可以和后端协调返回什么状态码,在此根据对应状态码进行对应处理
if (error.response) {
// 如302我就让用户返回登录页
if (error.response.status === 302) {
// window.location.assign('http://localhost:3000/login');
}
if (error.response.status === 400) {
message.error(error.response.data.errorMsg)
}
return Promise.reject(error)
} else {
return Promise.reject('请求超时, 请刷新重试')
}
})