spring-boot-starter-validation數據校驗全局異常攔截處理(轉發)
原版參考:https://blog.csdn.net/tangyb828/article/details/126884417
特殊備注:簡要整理筆記,非原著
一、引用Maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
二、使用攔截方式:
1、BindingResult對象接受和處理異常;
@PostMapping("/taxinfoSearch") public Object taxinfoSearch(@Validated @RequestBody TaxRequestOrgInfo request, BindingResult bindingResult){ if (bindingResult.hasErrors()) { String messages = bindingResult.getAllErrors() .stream() .map(ObjectError::getDefaultMessage) .reduce((m1, m2) -> m1 + ";" + m2) .orElse("參數輸入有誤!"); return TaxOutResponse.loadResponseMsg(messages); } return orgInfoService.orgTaxInfoSearch(request).get(AjaxResult.DATA_TAG); }
2、異常類攔截:
package dbgo.aei.qdtax; import dbgo.aei.common.core.model.TaxOutResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.annotation.Order; import org.springframework.http.HttpStatus; import org.springframework.validation.BindException; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestControllerAdvice; import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolationException; import java.util.stream.Collectors; /** * Description validation攔截器 * Author justin.jia * Date 2023/5/15 9:58 **/ @Order(80) @RestControllerAdvice public class ValidationExceptionHandle { //日志文件 public Logger logger = LoggerFactory.getLogger(this.getClass()); /** * BindException異常處理 * <p>BindException: 作用于@Validated @Valid 注解,僅對于表單提交有效,對于以json格式提交將會失效</p> * * @param e BindException異常信息 * @return 響應數據 */ @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(BindException.class) public TaxOutResponse bindExceptionHandler(BindException e) { String msg = e.getBindingResult().getFieldErrors() .stream() .map(n -> String.format("%s: %s", n.getField(), n.getDefaultMessage())) .reduce((x, y) -> String.format("%s; %s", x, y)) .orElse("參數輸入有誤"); logger.error("BindException異常,參數校驗異常:{}", msg); return TaxOutResponse.loadResponseMsg(msg); } /** * MethodArgumentNotValidException-Spring封裝的參數驗證異常處理 * <p>MethodArgumentNotValidException:作用于 @Validated @Valid 注解,接收參數加上@RequestBody注解(json格式)才會有這種異常。</p> * * @param e MethodArgumentNotValidException異常信息 * @return 響應數據 */ @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(value = MethodArgumentNotValidException.class) public TaxOutResponse methodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) { String msg = e.getBindingResult().getFieldErrors() .stream() .map(n -> String.format("%s: %s", n.getField(), n.getDefaultMessage())) .reduce((x, y) -> String.format("%s; %s", x, y)) .orElse("參數輸入有誤"); logger.error("MethodArgumentNotValidException異常,參數校驗異常:{}", msg); return TaxOutResponse.loadResponseMsg(msg); } /** * ConstraintViolationException-jsr規范中的驗證異常,嵌套檢驗問題 * <p>ConstraintViolationException:作用于 @NotBlank @NotNull @NotEmpty 注解,校驗單個String、Integer、Collection等參數異常處理。</p> * <p>注:Controller類上必須添加@Validated注解,否則接口單個參數校驗無效</p> * * @param e ConstraintViolationException異常信息 * @return 響應數據 */ @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(value = ConstraintViolationException.class) public TaxOutResponse constraintViolationExceptionHandler(ConstraintViolationException e) { String msg = e.getConstraintViolations() .stream() .map(ConstraintViolation::getMessage) .collect(Collectors.joining("; ")); logger.error("ConstraintViolationException,參數校驗異常:{}", msg); return TaxOutResponse.loadResponseMsg(msg); } }

浙公網安備 33010602011771號