• springboot 全局异常处理


    package com..web.advice;
    
    import com.web.JsonResult;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.http.HttpStatus;
    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.ResponseStatus;
    import org.springframework.validation.BindException;
    import org.springframework.validation.BindingResult;
    import org.springframework.web.bind.MethodArgumentNotValidException;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.validation.ConstraintViolation;
    import javax.validation.ConstraintViolationException;
    import java.util.Iterator;
    import java.util.Set;
    
    
    @ControllerAdvice(basePackages = {"com.web"})
    @Slf4j
    public class WebControllerAdvice {
    
        @ExceptionHandler(MethodArgumentNotValidException.class)
        @ResponseBody
        JsonResult handlerMethodArgumentNotValidException(HttpServletRequest request, MethodArgumentNotValidException exception) {
            log.error("Controller MethodArgumentNotValidException-Path:[{}],refer:{}", request.getRequestURI(), request.getHeader("referer"), exception);
            return getBindingResultErrorMessage(exception.getBindingResult());
        }
    
        @ExceptionHandler(BindException.class)
        @ResponseBody
        public JsonResult handleMethodBindException(HttpServletRequest request, BindException e) {
            log.error("Controller BindException-Path:{},refer:{}", request.getRequestURI(), request.getHeader("referer"));
            return getBindingResultErrorMessage(e.getBindingResult());
        }
    
        private JsonResult getBindingResultErrorMessage(BindingResult bindingResult2) {
            final BindingResult bindingResult = bindingResult2;
            return JsonResult.fail("500", bindingResult.getAllErrors().get(0).getDefaultMessage());
        }
    
        @ExceptionHandler(ConstraintViolationException.class)
        @ResponseBody
        JsonResult handlerConstraintViolationException(HttpServletRequest request, ConstraintViolationException exception) {
            log.error("Controller ConstraintViolationException-Path:[{}]", request.getRequestURI(), exception);
            Set<ConstraintViolation<?>> constraintViolations = exception.getConstraintViolations();
            final Iterator<ConstraintViolation<?>> constraintViolationIterator = constraintViolations.iterator();
            if (constraintViolationIterator.hasNext()) {
                ConstraintViolation<?> constraintViolation = constraintViolationIterator.next();
                return JsonResult.fail("500", constraintViolation.getMessage());
            }
            return JsonResult.fail("500", "参数异常");
        }
    
        @ExceptionHandler(ServiceException.class)
        @ResponseStatus(HttpStatus.OK)
        @ResponseBody
        JsonResult handleControllerServiceException(HttpServletRequest request, Throwable th) {
            ServiceException exception = (ServiceException) th;
            log.error("Controller ServiceException-Path:[{}]", request.getRequestURI(), th);
            return JsonResult.fail(exception.getCode(), exception.getMessage());
        }
    
        @ExceptionHandler(Exception.class)
        @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
        @ResponseBody
        JsonResult handleControllerException(HttpServletRequest request, Throwable th) {
            HttpStatus status = getStatus(request);
            log.error("Controller Path: [{}]", request.getRequestURI(), th);
            return JsonResult.fail(status.toString(), "系统错误");
        }
    
        private HttpStatus getStatus(HttpServletRequest request) {
            Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
            if (statusCode == null) {
                return HttpStatus.INTERNAL_SERVER_ERROR;
            }
            return HttpStatus.valueOf(statusCode);
        }
    }
  • 相关阅读:
    如何动态调用WebServices
    Cache及(HttpRuntime.Cache与HttpContext.Current.Cache)
    SQL创建索引(转)
    TSQL用法四:OpenDataSource, OpenRowSet
    AppDomain动态加载程序集
    hdu 2544 最短路
    hdu 1151 Air Raid
    hdu3790 最短路径问题
    hdu 1548 A strange lift
    对于 前K短路径问题 和 A*算法 的一些小小总结
  • 原文地址:https://www.cnblogs.com/tiancai/p/14927119.html
Copyright © 2020-2023  润新知