【SpringBoot】服务端数据校验与全局异常处理
创始人
2024-06-03 10:26:29
0

通常,服务端的数据校验通常不是面向用户的,提示信息还是应该以面向程序员和运维人员为主,在数据进入后台之前进行一道拦截。前端js的数据校验提示信息,是面向用户的,要更加的友好!

一、异常校验的规范及常用注解

在web开发时,对于请求参数,一般上都需要进行参数合法性校验的,原先的写法时一个个字段一个个去判断,这种方式太不通用了,所以java的JSR 303: Bean Validation规范就是解决这个问题的。
JSR 303只是个规范,并没有具体的实现,目前通常都是才有hibernate-validator进行统一参数校验。

JSR303定义的校验类型

Constraint详细信息
@Null被注释的元素必须为 null
@NotNull被注释的元素必须不为 null
@AssertTrue被注释的元素必须为 true
@AssertFalse被注释的元素必须为 false
@Min(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max, min)被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction)被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past被注释的元素必须是一个过去的日期
@Future被注释的元素必须是一个将来的日期
@Pattern(value)被注释的元素必须符合指定的正则表达式

Hibernate Validator 附加的 constraint

Constraint详细信息
@Email被注释的元素必须是电子邮箱地址
@Length被注释的字符串的大小必须在指定的范围内
@NotEmpty被注释的字符串的必须非空
@Range被注释的元素必须在合适的范围内

用法:把以上注解加在ArticleVO的属性字段上,然后在参数校验的方法上加@Valid注解
如:

@PutMapping("/article/{id}")
public @ResponseBody AjaxResponse updateArticle(@Valid @RequestBody ArticleVO article) {//业务return AjaxResponse.success();
}

如果感觉以上的注解仍然不够用,可以自定义注解,参考:
http://blog.lqdev.cn/2018/07/20/springboot/chapter-eight/

二、友好的数据校验异常处理(用户输入异常的全局处理)

我们已知当数据校验失败的时候,会抛出异常BindException或MethodArgumentNotValidException。所以我们对这两种异常做全局处理,防止程序员重复编码带来困扰。

@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public AjaxResponse handleBindException(MethodArgumentNotValidException ex) {FieldError fieldError = ex.getBindingResult().getFieldError();return AjaxResponse.error(new CustomException(CustomExceptionType.USER_INPUT_ERROR,fieldError.getDefaultMessage()));
}@ExceptionHandler(BindException.class)
@ResponseBody
public AjaxResponse handleBindException(BindException ex) {FieldError fieldError = ex.getBindingResult().getFieldError();return AjaxResponse.error(new CustomException(CustomExceptionType.USER_INPUT_ERROR,fieldError.getDefaultMessage()));
}

相关内容

热门资讯

玩家终于实锤了!闲趣有挂吗(分... 亲,闲趣这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,闲趣的开挂软件,名称叫闲趣...
玩家终于实锤了!乐悠空间有挂吗... 您好,乐悠空间这款游戏可以开挂的,确实是有挂的,需要了解{请加QQ群客服咨询:1075075785}...
玩家终于实锤了!青藤鼎趣麻将有... 玩家终于实锤了!青藤鼎趣麻将有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)一、青藤鼎趣麻将AI...
玩家终于实锤了!微乐浙江麻将有... 你好微乐浙江麻将这个游戏其实有挂的,确实是有挂的,需要了解【请加QQ群客服咨询:1075075785...
玩家终于实锤了!悠闲游戏有挂吗... 自定义悠闲游戏系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管你是想分...
玩家终于实锤了!决胜斗地主有挂... 自定义决胜斗地主系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管你是想...
玩家终于实锤了!龙焱互娱有挂吗... 自定义龙焱互娱系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管你是想分...
玩家终于实锤了!大胜跑得快有挂... 玩家终于实锤了!大胜跑得快有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)一、大胜跑得快AI软件...
玩家终于实锤了!大唐麻将有挂吗... 自定义大唐麻将系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管你是想分...
玩家终于实锤了!粤麻圈麻将有挂... 玩家终于实锤了!粤麻圈麻将有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)是一款可以让一直输的玩...
玩家终于实锤了!同城游牛鬼有挂... 玩家终于实锤了!同城游牛鬼有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)是一款可以让一直输的玩...
玩家终于实锤了!艾彼娱乐有挂吗... 玩家终于实锤了!艾彼娱乐有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)是一款可以让一直输的玩家...
玩家终于实锤了!打两圈麻将有挂... 您好:打两圈麻将确实真的有挂,软件请加QQ群客服咨询:1075075785确实是有挂的,很多玩家在这...
玩家终于实锤了!科乐斗地主有挂... 玩家终于实锤了!科乐斗地主有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)是一款可以让一直输的玩...
玩家终于实锤了!POKERIS... 自定义POKERIST系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管...
玩家终于实锤了!大富豪有挂吗(... 你好大富豪这个游戏其实有挂的,确实是有挂的,需要了解【请加QQ群客服咨询:1075075785】, ...
玩家终于实锤了!乐胡娱乐有挂吗... 玩家终于实锤了!乐胡娱乐有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)1、让任何用户在无需AI...
玩家终于实锤了!哈哈长沙麻将有... 你好哈哈长沙麻将这个游戏其实有挂的,确实是有挂的,需要了解【请加QQ群客服咨询:1075075785...
玩家终于实锤了!中至斗地主有挂... 您好:中至斗地主确实真的有挂,软件请加QQ群客服咨询:1075075785确实是有挂的,很多玩家在这...
玩家终于实锤了!海浪手游有挂吗... 亲,海浪手游这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,海浪手游的开挂软件,名...