springboot如何传参校验@Valid及对其的异常捕获方式

  介绍

这篇文章将为大家详细讲解有关springboot如何传参校验@Valid及对其的异常捕获方式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

传参校验@Valid及对其的异常捕获

springboot参数经常需要进行校验,比如创建文件,文件名就需要进行一定的校验。

本文以创建文件夹为例进行参数校验:控制器:

首先就是在需要校验的参数类前面添加注释@Valid

@ApiOperation (=value “创建目录“,,notes =,“在某目录下创建新文件夹“)   ,,,@ApiResponses ({   ,,,,,,,,,,,@ApiResponse (=code  500年,response =, RestCodeMsg.class,, message =,“错误“)   ,,,})   ,,,@PostMapping (=value “api/场景/createdir")   ,,,public  ResponseEntity, createNewOrEditFile (@RequestBody  @Valid  ixviewVo  ixveVo), {   ,,,,....   ,,,,//校验与内容无关   ,,,}

其次对参数类进行校验设置:

@ 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   null

springboot如何传参校验@Valid及对其的异常捕获方式