介绍
这篇文章将为大家详细讲解有关springboot如何传参校验@Valid及对其的异常捕获方式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
传参校验@Valid及对其的异常捕获
springboot参数经常需要进行校验,比如创建文件,文件名就需要进行一定的校验。
本文以创建文件夹为例进行参数校验:控制器:
首先就是在需要校验的参数类前面添加注释@Valid
@ApiOperation (=value “创建目录“,,notes =,“在某目录下创建新文件夹“) ,,,@ApiResponses ({ ,,,,,,,,,,,@ApiResponse (=code 500年,response =, RestCodeMsg.class,, message =,“错误“) ,,,}) ,,,@PostMapping (=value “api/场景/createdir") ,,,public ResponseEntity
其次对参数类进行校验设置:
@ data @ApiModel @ getter @ setter @NoArgsConstructor public class  ixviewVo { ,,,@ApiModelProperty(“是否文件夹“) ,,,private boolean dir; ,,,@NotBlank(消息=澳柯济撇荒芪铡? ,,,@Pattern (regexp=癧^ \ \ \ \ \ \/: \ \ * \ \ ? \ \ \“& lt;祝辞\ \ | \ \]* [^ \ \ \ \ \ \/:\ \ * \ \ ? \ \ \“& lt;祝辞\ \ | \ \]“美元,消息=澳柯济撇环媳曜肌? ,,,@ApiModelProperty(“目录名称“) ,,,private String 目录名; ,,,@ApiModelProperty(“上级目录ID") ,,,private Long parentId; }
其中[^ \ \ \ \ \ \/:\ \ * \ \ ? \ \ \“& lt;祝辞\ \ | \ \]* [^ \ \ \ \ \ \/:\ \ * \ \ ? \ \ \“& lt;祝辞\ \ | \ \。]美元为文件名称校验的正则表达式,复制进代码记得去掉自动生成的\。
到此,对参数校验的全部设置完成。当参数不符合校验则会抛出异常,接下来就是对抛出的异常进行捕获:
@RestControllerAdvice public class  BadRequestExceptionHandler { ,,,private static final Logger Logger =, LoggerFactory.getLogger (BadRequestExceptionHandler.class); ,,,@ExceptionHandler (MethodArgumentNotValidException.class) ,,,public ResponseEntity validationBodyException (MethodArgumentNotValidException 例外){ ,,,,,,,BindingResult result =, exception.getBindingResult (); ,,,,,,,if (result.hasErrors ()), { ,,,,,,,,,,,List, errors =, result.getAllErrors (); ,,,,,,,,,,,errors.forEach (p →{ ,,,,,,,,,,,,,,,FieldError FieldError =, (FieldError), p; ,,,,,,,,,,,,,,,logger.error (“Data  check failure :,对象{“+ fieldError.getObjectName() +“},{领域“+ fieldError.getField () + ,,,,,,,,,,,,,,,,,,,,,,,,},errorMessage {“+ fieldError.getDefaultMessage () +“}”); ,,,,,,,,,,,}); ,,,,,,,} ,,,,,,,return ResponseEntity.ok (getPublicBackValue(假,,“目录名称不符合标准“)); ,,,} ,,,public Map<字符串,Object>, getPublicBackValue (boolean ,国旗,String 消息),{ ,,,,,,,Map<字符串,Object>, map =, new HashMap<字符串,Object> (); ,,,,,,,if (国旗),{ ,,,,,,,,,,,map.put (“result_code",, 0); ,,,,,,,},{else ,,,,,,,,,,,map.put (“result_code",, 1); ,,,,,,,} ,,,,,,,map.put (“result_reason",,消息); ,,,,,,,return 地图; ,,,} }
@Valid校验异常捕捉
@Api (tags =,{“参数管理“}) @Validated @RestController @RequestMapping(“/模块/param") null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null nullspringboot如何传参校验@Valid及对其的异常捕获方式