RequestValidateExceptionHandler.java 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package com.hb.proj.allconfig;
  2. import java.util.Set;
  3. import jakarta.validation.ConstraintViolation;
  4. import jakarta.validation.ConstraintViolationException;
  5. import org.slf4j.Logger;
  6. import org.slf4j.LoggerFactory;
  7. import org.springframework.validation.BindException;
  8. import org.springframework.validation.BindingResult;
  9. import org.springframework.validation.FieldError;
  10. import org.springframework.web.HttpRequestMethodNotSupportedException;
  11. import org.springframework.web.bind.annotation.ExceptionHandler;
  12. import org.springframework.web.bind.annotation.RestControllerAdvice;
  13. import com.hb.proj.utils.RespVO;
  14. import com.hb.proj.utils.RespVOBuilder;
  15. @RestControllerAdvice
  16. public class RequestValidateExceptionHandler {
  17. private static final Logger logger=LoggerFactory.getLogger(RequestValidateExceptionHandler.class);
  18. //处理请求参数格式错误 @RequestParam上validate失败后抛出的异常是javax.validation.ConstraintViolationException
  19. @ExceptionHandler(ConstraintViolationException.class)
  20. public RespVO constraintViolationExceptionHandler(ConstraintViolationException e) {
  21. //e.printStackTrace();
  22. Set<ConstraintViolation<?>> constraintViolations=e.getConstraintViolations();
  23. StringBuilder error=new StringBuilder();
  24. for(ConstraintViolation<?> itm : constraintViolations) {
  25. //System.out.println(itm.getInvalidValue()+":"+itm.getPropertyPath()+":"+itm.getMessage());
  26. error.append(itm.getMessage()+";");
  27. }
  28. //jdk8 写法:String message = e.getConstraintViolations().stream().map(ConstraintViolation::getMessage).collect(Collectors.joining());
  29. return RespVOBuilder.error(error.toString());//
  30. }
  31. @ExceptionHandler(BindException.class)
  32. public RespVO validationExceptionHandler(BindException e) {
  33. //e.printStackTrace();
  34. BindingResult bindingResult = e.getBindingResult();
  35. StringBuilder error=new StringBuilder();
  36. for (FieldError fieldError : bindingResult.getFieldErrors()) {
  37. error.append(fieldError.getDefaultMessage()+";");
  38. }
  39. return RespVOBuilder.error(error.toString());
  40. }
  41. @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
  42. public RespVO methodUnsupportExceptionHandler(HttpRequestMethodNotSupportedException e) {
  43. logger.error("不支持该请求方式",e);
  44. return RespVOBuilder.error("不支持该请求方式");
  45. }
  46. @ExceptionHandler(Exception.class)
  47. public RespVO otherExceptionHandler(Exception e) {
  48. logger.error("服务出错",e);
  49. return RespVOBuilder.error("服务出错");
  50. }
  51. }