package com.moral.api.exception; import com.alibaba.druid.wall.violation.ErrorCode; import com.moral.api.utils.StringUtils; import com.moral.constant.Constants; import com.moral.constant.ResponseCodeEnum; import com.moral.constant.ResultMessage; import com.moral.exception.TokenException; import lombok.extern.slf4j.Slf4j; import org.springframework.context.support.DefaultMessageSourceResolvable; import org.springframework.http.HttpStatus; import org.springframework.validation.FieldError; import org.springframework.web.bind.MethodArgumentNotValidException; 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 java.util.List; import java.util.Map; import java.util.stream.Collectors; @ControllerAdvice @ResponseBody public class GlobalExceptionHandler { /** * 处理全部异常 */ @ExceptionHandler @ResponseBody @ResponseStatus(HttpStatus.OK) public ResultMessage handleException(Exception ex) { ex.printStackTrace(); return ResultMessage.fail(ResponseCodeEnum.FAIL.getCode(), ResponseCodeEnum.FAIL.getMsg()); } /** * 处理BusinessException异常 */ @ExceptionHandler({BusinessException.class}) @ResponseBody @ResponseStatus(HttpStatus.OK) public ResultMessage handleUserNotExistException(BusinessException ex) { return ResultMessage.fail(ResponseCodeEnum.FAIL.getCode(), "请求用户数据失败"); } @ExceptionHandler public ResultMessage exceptionHandler(MethodArgumentNotValidException e){ List collect = e.getBindingResult().getFieldErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage) .collect(Collectors.toList()); return ResultMessage.fail(ResponseCodeEnum.FAIL.getCode(), StringUtils.join(collect, ",")); } /** * 处理TokenException异常 */ @ExceptionHandler({TokenException.class}) @ResponseBody @ResponseStatus(HttpStatus.OK) public ResultMessage handleTokenException(TokenException ex) { return ResultMessage.fail(ex.getCode(),ex.getMsg()); } }