解决@Validated注解无效|解决@Validated注解无效,嵌套对象属性的@NotBlank无效问题
目录
- @Validated注解无效,嵌套对象属性的@NotBlank无效
- 步骤
- 内层对象无法验证
- @Validated注解不生效问题、如何使用
- 1、需要引入的包
- 2、将@Validated打在controller中需要验证的实体类前面
- 3、在具体实体类中定义字段的验证规则
- 4、数据格式校验
- 在controller中的方法中进行单个参数校验注意事项
@Validated注解无效,嵌套对象属性的@NotBlank无效 最近在做的公司项目是一个表单系统,刚好要用到@Validated注解来对表单字段进行验证。第一次使用遇到了一些坑,问了同事之后,总算是掌握了。
步骤
首先,在dto实体你想要做验证的属性前,加上@NotBlank/NotNull/NotEmpty注解:
文章图片
他们的区别如下:
@NotBlank
:只用在String上,表示传进来的值不能为null,而且调用trim()后,长度必须大于0@NotNull
:不能为null,但可以为empty(分配了内存空间,但值为空)@NotEmpty
:不能为null,而且长度必须大于0
文章图片
然后运行,给属性传递空值,发现没有任何反应;是因为没在接口方法的参数前加上@Valid注解,如下所示:
文章图片
加上后再运行,传递空值,成功报错。 (同时,以上总结可以加在controller层进行验证,@valid同样加在方法参数前,@validated加在controller类名前图
文章图片
同样能起效果)
内层对象无法验证
做到后面发现传递的对象里面还有一个对象,要对里面的对象进行验证,这时候是验证不到的
文章图片
文章图片
需要在里面对象前也加上总结@valid,这样,无论嵌套多少,都可以验证
文章图片
(对于对象泛型,也能验证成功)
@Validated注解不生效问题、如何使用
1、需要引入的包
(缺少其中一个包,项目会报错,或者validate注解不生效)
- hibernate-validator-6.0.14.Final.jar
- jboss-logging-3.3.2.Final.jar
- validation-api-2.0.1.Final.jar
- classmate-1.4.0.jar
2、将@Validated打在controller中需要验证的实体类前面
@PostMapping("/add")@ResponseBodypublic AjaxResult addSave(@Validated SysDept dept){}
3、在具体实体类中定义字段的验证规则
(这里注解可以放在字段上,或者是get方法上,放在set方法上,会报错)
private String deptName; @NotBlank(message = "部门名称不能为空")@Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符")public String getDeptName(){return deptName; }
4、数据格式校验
对其错误进行处理(全局异常处理),不进行处理,会直接报400错误
@ControllerAdvice
可以实现三个方面的功能:
- 全局异常处理
- 全局数据绑定
- 全局数据预处理
@RestControllerAdvicepublic class GlobalExceptionHandler{@ExceptionHandler(BindException.class)public ApiResult validatedBindException(BindException e){log.error(e.getMessage(), e); String message = e.getAllErrors().get(0).getDefaultMessage(); return ApiResult .error(message); }}
在controller中的方法中进行单个参数校验注意事项
1、controller类上打上注解@Validated
2、方法参数上给出格式如:
public Result method(@NotNull @RequestParam("id") Long id) {
3、其中@RequestParam("id")必须加,否则验证无效
【解决@Validated注解无效|解决@Validated注解无效,嵌套对象属性的@NotBlank无效问题】以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- parallels|parallels desktop 解决网络初始化失败问题
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- Spark|Spark 数据倾斜及其解决方案
- 解决SyntaxError:|解决SyntaxError: invalid syntax
- Spectrum|Spectrum 区块偶尔停止同步问题排查与解决笔记
- 一劳永逸地解决词汇量不够的问题
- Hexo代码块前后空白行问题