解决@Validated注解无效,嵌套对象属性的@NotBlank无效问题

网友投稿 1705 2022-11-30

解决@Validated注解无效,嵌套对象属性的@NotBlank无效问题

解决@Validated注解无效,嵌套对象属性的@NotBlank无效问题

目录@ValidateoWCiGdZkd注解无效,嵌套对象属性的@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

然后在service层接口前添加注解@Validated

然后运行,给属性传递空值,发现没有任何反应;是因为没在接口方法的参数前加上@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")

@ResponseBody

public 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

可以实现三个方面的功能:

全局异常处理

全局数据绑定

全局数据预处理

@RestControllerAdvice

public class GlobalExceptionHandler{

@ExceptionHandler(BindException.class)

public ApiResult validatedBindException(BindException e){

log.error(oWCiGdZke.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")必须加,否则验证无效

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Go 变量 运算符
下一篇:Go 结构化编程 条件和循环
相关文章

 发表评论

暂时没有评论,来抢沙发吧~