| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- package cc.mrbird.febs.common.handler;
- import cc.mrbird.febs.common.entity.FebsResponse;
- import cc.mrbird.febs.common.exception.FebsException;
- import cc.mrbird.febs.common.exception.FileDownloadException;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.http.HttpStatus;
- import org.springframework.security.access.AccessDeniedException;
- import org.springframework.validation.BindException;
- import org.springframework.validation.FieldError;
- import org.springframework.web.HttpMediaTypeNotSupportedException;
- import org.springframework.web.HttpRequestMethodNotSupportedException;
- import org.springframework.web.bind.MethodArgumentNotValidException;
- import org.springframework.web.bind.annotation.ExceptionHandler;
- import org.springframework.web.bind.annotation.ResponseStatus;
- import javax.validation.ConstraintViolation;
- import javax.validation.ConstraintViolationException;
- import javax.validation.Path;
- import java.util.List;
- import java.util.Set;
- /**
- * @author MrBird
- */
- @Slf4j
- public class BaseExceptionHandler {
- @ExceptionHandler(value = Exception.class)
- @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
- public FebsResponse handleException(Exception e) {
- log.error("系统内部异常,异常信息", e);
- return new FebsResponse().message("系统内部异常");
- }
- @ExceptionHandler(value = FebsException.class)
- @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
- public FebsResponse handleFebsException(FebsException e) {
- log.error("系统错误", e);
- return new FebsResponse().message(e.getMessage());
- }
- /**
- * 统一处理请求参数校验(实体对象传参)
- *
- * @param e BindException
- * @return FebsResponse
- */
- @ExceptionHandler(BindException.class)
- @ResponseStatus(HttpStatus.BAD_REQUEST)
- public FebsResponse handleBindException(BindException e) {
- StringBuilder message = new StringBuilder();
- List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();
- for (FieldError error : fieldErrors) {
- message.append(error.getField()).append(error.getDefaultMessage()).append(",");
- }
- message = new StringBuilder(message.substring(0, message.length() - 1));
- return new FebsResponse().message(message.toString());
- }
- /**
- * 统一处理请求参数校验(普通传参)
- *
- * @param e ConstraintViolationException
- * @return FebsResponse
- */
- @ExceptionHandler(value = ConstraintViolationException.class)
- @ResponseStatus(HttpStatus.BAD_REQUEST)
- public FebsResponse handleConstraintViolationException(ConstraintViolationException e) {
- StringBuilder message = new StringBuilder();
- Set<ConstraintViolation<?>> violations = e.getConstraintViolations();
- for (ConstraintViolation<?> violation : violations) {
- Path path = violation.getPropertyPath();
- String[] pathArr = StringUtils.splitByWholeSeparatorPreserveAllTokens(path.toString(), ".");
- message.append(pathArr[1]).append(violation.getMessage()).append(",");
- }
- message = new StringBuilder(message.substring(0, message.length() - 1));
- return new FebsResponse().message(message.toString());
- }
- /**
- * 统一处理请求参数校验(json)
- *
- * @param e ConstraintViolationException
- * @return FebsResponse
- */
- @ExceptionHandler(MethodArgumentNotValidException.class)
- @ResponseStatus(HttpStatus.BAD_REQUEST)
- public FebsResponse handlerMethodArgumentNotValidException(MethodArgumentNotValidException e) {
- StringBuilder message = new StringBuilder();
- for (FieldError error : e.getBindingResult().getFieldErrors()) {
- message.append(error.getField()).append(error.getDefaultMessage()).append(",");
- }
- message = new StringBuilder(message.substring(0, message.length() - 1));
- log.error(message.toString(), e);
- return new FebsResponse().message(message.toString());
- }
- @ExceptionHandler(value = FileDownloadException.class)
- @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
- public void handleFileDownloadException(FileDownloadException e) {
- log.error("FileDownloadException", e);
- }
- @ExceptionHandler(value = AccessDeniedException.class)
- @ResponseStatus(HttpStatus.FORBIDDEN)
- public FebsResponse handleAccessDeniedException() {
- return new FebsResponse().message("没有权限访问该资源");
- }
- @ExceptionHandler(value = HttpMediaTypeNotSupportedException.class)
- @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
- public FebsResponse handleHttpMediaTypeNotSupportedException(HttpMediaTypeNotSupportedException e) {
- return new FebsResponse().message("改方法不支持" + StringUtils.substringBetween(e.getMessage(), "'", "'") + "媒体类型");
- }
- @ExceptionHandler(value = HttpRequestMethodNotSupportedException.class)
- @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
- public FebsResponse handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) {
- return new FebsResponse().message("该方法不支持" + StringUtils.substringBetween(e.getMessage(), "'", "'") + "请求方法");
- }
- }
|