123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- /**
- * Copyright (c) 2016-2019 人人开源 All rights reserved.
- *
- * https://www.renren.io
- *
- * 版权所有,侵权必究!
- */
- package com.huimv.common.exception;
- import com.huimv.common.utils.R;
- import org.apache.shiro.authz.AuthorizationException;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.dao.DuplicateKeyException;
- import org.springframework.validation.FieldError;
- import org.springframework.validation.ObjectError;
- import org.springframework.web.bind.MethodArgumentNotValidException;
- import org.springframework.web.bind.MissingServletRequestParameterException;
- import org.springframework.web.bind.annotation.ExceptionHandler;
- import org.springframework.web.bind.annotation.ResponseBody;
- import org.springframework.web.bind.annotation.RestControllerAdvice;
- import org.springframework.web.servlet.NoHandlerFoundException;
- import javax.validation.ConstraintViolationException;
- import java.sql.SQLIntegrityConstraintViolationException;
- /**
- * 异常处理器
- *
- * @author Mark sunlightcs@gmail.com
- */
- @RestControllerAdvice
- public class RRExceptionHandler {
- private Logger logger = LoggerFactory.getLogger(getClass());
- /**
- * 处理自定义异常
- */
- @ExceptionHandler(RRException.class)
- public R handleRRException(RRException e){
- R r = new R();
- r.put("code", e.getCode());
- r.put("msg", e.getMessage());
- return r;
- }
- @ExceptionHandler(NoHandlerFoundException.class)
- public R handlerNoFoundException(Exception e) {
- logger.error(e.getMessage(), e);
- return R.error(404, "路径不存在,请检查路径是否正确");
- }
- @ExceptionHandler(DuplicateKeyException.class)
- public R handleDuplicateKeyException(DuplicateKeyException e){
- logger.error(e.toString());
- String message = e.getCause().getMessage();
- String[] s = message.split(" ");
- return R.error(600,s[2].replace("'","") + " 已经存在!");
- }
- @ExceptionHandler(AuthorizationException.class)
- public R handleAuthorizationException(AuthorizationException e){
- logger.error(e.getMessage(), e);
- return R.error("没有权限,请联系管理员授权");
- }
- @ExceptionHandler(value = LimitAccessException.class)
- public R handleLimitAccessException(LimitAccessException e) {
- logger.error("LimitAccessException", e);
- return R.error(429,e.getMessage());
- }
- //当校验失败时,会抛出MethodArgumentNotValidException
- //输出错误原因到前端
- @ExceptionHandler(MethodArgumentNotValidException.class)
- public R handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {
- StringBuilder sb = new StringBuilder();
- for(ObjectError error : ex.getBindingResult().getAllErrors()){
- if(error instanceof FieldError){
- FieldError e = (FieldError) error;
- sb.append(e.getField()).append(e.getDefaultMessage()).append(" ");
- }
- }
- return R.error(1001,sb.toString());
- }
- @ExceptionHandler(ConstraintViolationException.class)
- public R handleConstraintViolationException(ConstraintViolationException e) {
- logger.error(e.getMessage(),e);
- StringBuilder sb = new StringBuilder();
- e.getConstraintViolations().forEach(constraintViolation -> sb.append(constraintViolation.getMessage()).append(" "));
- return R.error(1001,sb.toString().substring(0,sb.length() - 1));
- }
- @ExceptionHandler(MissingServletRequestParameterException.class)
- public R handMissingServletRequestParameterException(MissingServletRequestParameterException e) {
- logger.error(e.getMessage(),e);
- return R.error(1001,e.getMessage());
- }
- @ExceptionHandler(Exception.class)
- public R handleException(Exception e){
- logger.error(e.getMessage(), e);
- return R.error();
- }
- }
|