发布日期:2024-06-26 11:04 点击次数:190
@Valid ,@NotBlank,@NotNull是比拟常用的参数校验注解
然而validate参数校验失败后,复返的json数据可能并不是我们最终念念要的,下图即是校验失败后它默许复返的数据
图片
一般情况下,我们可能只需要图中标红的阿谁教导信息就OK了
那怎么改它的复返数据呢?
唯一添加一个格外惩处类就行了
/** * validate校验 格外长入捕捉惩处类 */@ControllerAdvicepublic class WebExceptionHandler { /** * 惩处央求参数秩序失误 @RequestBody上使用@Valid 实体上使用@NotNull等,考证失败后抛出的格外是MethodArgumentNotValidException格外 */ @ExceptionHandler(MethodArgumentNotValidException.class) @ResponseBody public JsonData MethodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) { String message = e.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining()); return JsonData.buildCodeAndMsg(BASE_VAILD_EXCEPTION.getCode(),message); } /** * 惩处Get央求中 使用@Valid 考证旅途中请务实体校验失败后抛出的格外 */ @ExceptionHandler(BindException.class) @ResponseBody public JsonData BindExceptionHandler(BindException e) { String message = e.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining()); return JsonData.buildCodeAndMsg(BASE_VAILD_EXCEPTION.getCode(),message); } /** * 惩处央求参数秩序失误 @RequestParam上validate失败后抛出的格外是ConstraintViolationException */ @ExceptionHandler(ConstraintViolationException.class) @ResponseBody public JsonData ConstraintViolationExceptionHandler(ConstraintViolationException e) { String message = e.getConstraintViolations().stream().map(ConstraintViolation::getMessage).collect(Collectors.joining()); return JsonData.buildCodeAndMsg(BASE_VAILD_EXCEPTION.getCode(),message); } /** * 参数秩序格外 */ @ExceptionHandler(HttpMessageNotReadableException.class) @ResponseBody public JsonData HttpMessageNotReadableExceptionHandler(HttpMessageNotReadableException e) { return JsonData.buildCodeAndMsg(BASE_VAILD_EXCEPTION.getCode(),"参数秩序格外"); }}
竖立完,看下效劳
图片
不错看到当前复返的数据仍是是我们自界说的数据了
二、竖立校验快速失败:唯一出现校验失败的情况, 河北乐陶进出口有限公司就收尾校验, 于田县利艾聚合物有限公司不再进行后续的校验validate参数校验默许的是一个参数校验失败后, 浙江丝维纺织有限公司还会不绝校验后头的参数, 揭阳市顺星不锈钢实业有限公司如下图,企业-航雅骏坚果有限公司它会复返多个信息
图片
然而骨子情况一般是唯一有一个参数校验失败了,大衣就收尾复返。那怎么改成念念要的这么呢?
很简易,亦然加一个竖立类就好了(然而有的版块是不奏凯的)
/** * validate参数校验默许的是一个参数校验失败后,还会不绝校验后头的参数 * 通过这个竖立改成:校验参数时唯一出现校验失败的情况,就立即抛出对应的格外,收尾校验,不再进行后续的校验 */@Configurationpublic class WebConfig { @Bean public Validator validator() { ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class) .configure() //failFast的兴趣兴趣唯一出现校验失败的情况,就立即收尾校验,不再进行后续的校验。 .failFast(true) .buildValidatorFactory(); return validatorFactory.getValidator(); } @Bean public MethodValidationPostProcessor methodValidationPostProcessor() { MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor(); methodValidationPostProcessor.setValidator(validator()); return methodValidationPostProcessor; }}
竖立好后,重启形势,看下效劳
图片
不错看到就只复返了一条锻练失败的教导。
以为对你有匡助的话,不错点个存眷,点个赞大衣,3Q~
本站仅提供存储办事,总共内容均由用户发布,如发现存害或侵权内容,请点击举报。
Powered by 佛山市顺德区合捷电器实业有限公司 @2013-2022 RSS地图 HTML地图
Copyright 站群系统 © 2013-2024 SSWL 版权所有