package com.rongwei.zhsw.config; import com.rongwei.rwcommon.base.R; import com.rongwei.zhsw.system.controller.SwMonthlyMeterReadingRecordController; import org.springframework.stereotype.Component; import org.springframework.validation.FieldError; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolationException; import java.util.HashMap; import java.util.Map; import java.util.stream.Collectors; @Component("globalExceptionHandler1") // 指定 Bean 名称 @RestControllerAdvice(basePackages="com.rongwei.zhsw.system.controller",assignableTypes = {SwMonthlyMeterReadingRecordController.class}) public class GlobalExceptionHandler { /** * 处理所有 @Valid 参数校验失败异常 */ @ExceptionHandler(MethodArgumentNotValidException.class) public R handleValidationException(MethodArgumentNotValidException ex) { Map errors = new HashMap<>(); ex.getBindingResult().getAllErrors().forEach(error -> { String fieldName = ((FieldError) error).getField(); String message = error.getDefaultMessage(); errors.put(fieldName, message); }); return R.error("400", "参数校验失败").putData( errors); } /** * 处理List校验异常(新增) */ @ExceptionHandler(ConstraintViolationException.class) public R handleConstraintViolation(ConstraintViolationException ex) { Map errors = ex.getConstraintViolations() .stream() .collect(Collectors.toMap( v -> v.getPropertyPath().toString(), ConstraintViolation::getMessage )); return R.error("400", "列表参数校验失败").putData(errors); } /** * 兜底异常处理 */ @ExceptionHandler(Exception.class) public R handleException(Exception ex) { return R.error("服务器异常,请联系管理员!"); } }