大家好,欢迎来到IT知识分享网。
@Slf4j //@ControllerAdvice SpringMVC提供的统一处理异常,RestControllerAdvic是responseBody和ControllerAdvice结合返回json @RestControllerAdvice(basePackages = "com.xue.jdmall.product.controller") public class jdmallGlobalException {
//JSR303校验异常处理 @ExceptionHandler(value = MethodArgumentNotValidException.class) public R handleValidException(MethodArgumentNotValidException e){
log.error("数据校验出现异常信息:{},异常类型:{}",e.getMessage(),e.getClass()); BindingResult bindingResult = e.getBindingResult(); Map<String,String> map=new HashMap<>(); bindingResult.getFieldErrors().forEach(item->{
//获取校验失败自定义的message String message = item.getDefaultMessage(); //获取校验失败的字段 String name=item.getField(); map.put(name,message); }); return R.error(StatusCode.VALID_EXCEPTION.getCode(),StatusCode.VALID_EXCEPTION.getMsg()).put("data",map); } //处理任意类型的异常 @ExceptionHandler(Throwable.class) public R handleCommonException(Throwable throwable){
return R.error(); } }
SpringMVC提供了一个全局异常处理的注解@ControllerAdvice ,由于我们需要返回的都是JSON,因此使用RestControllerAdvic注解它是responseBody和ControllerAdvice结合返回json
举例使用:
比如前几篇文章提到的JSR303校验,之前是配合BindingResult来处理校验信息的,那样每个controller写太麻烦,因此我们在这里去掉BindingResult,校验失败进入全局异常处理,并在全局异常处理中使用BindingResult操作校验失败的信息:
加上@Valid注解后校验失败的话,会进入们所封装的统一处理异常也就是上边的jdmallGlobalException类,进入相应的异常处理。
@ExceptionHandler注解表明要处理的异常,最终再通过
全局统一结果处理(也就是上边的R) 返回给前端
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/146752.html