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

 更新时间:2021年10月20日 09:52:20   作者:linlangleo  
这篇文章主要介绍了解决@Validated注解无效,嵌套对象属性的@NotBlank无效问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring通过<import>标签导入外部配置文件

    Spring通过<import>标签导入外部配置文件

    之前文章里我们讲到Spring加载Xml配置文件的细节,那么加载完了我们肯定要解析这个配置文件中定义的元素。这篇我们首先来分析下Spring是如何通过标签导入外部配置文件的。
    2021-06-06
  • 解决HttpPost+json请求---服务器中文乱码及其他问题

    解决HttpPost+json请求---服务器中文乱码及其他问题

    这篇文章主要介绍了解决HttpPost+json请求---服务器中文乱码及其他问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • SpringBoot之如何搭建SpringBoot+Maven项目

    SpringBoot之如何搭建SpringBoot+Maven项目

    这篇文章主要介绍了SpringBoot之如何搭建SpringBoot+Maven项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 配置java环境变量(linux mac windows7)

    配置java环境变量(linux mac windows7)

    本文给大家详细总结介绍了Linux、MAC以及Windows下配置java环境变量的方法,非常的细致全面,有需要的小伙伴可以参考下
    2015-11-11
  • Java通过反射获取方法参数名的方式小结

    Java通过反射获取方法参数名的方式小结

    这篇文章主要为大家详细介绍了Java如何通过反射获取方法参数名的方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-02-02
  • SpringBoot自定义路由覆盖实现流程详解

    SpringBoot自定义路由覆盖实现流程详解

    这篇文章主要介绍了SpringBoot自定义路由覆盖实现流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-01-01
  • 简洁实用的Java Base64编码加密异常处理类代码

    简洁实用的Java Base64编码加密异常处理类代码

    这篇文章主要介绍了简洁实用的Java Base64编码加密异常处理类代码,有一定的实用价值,需要的朋友可以参考下
    2014-07-07
  • Java重点之基于比较的七大排序

    Java重点之基于比较的七大排序

    最近几天在研究排序算法,看了很多博客,发现网上有的文章中对排序算法解释的并不是很透彻,而且有很多代码都是错误的,所以我根据这几天看的文章,整理了一个较为完整的排序算法总结,本文中的所有算法均有JAVA实现,经本人调试无误后才发出,如有错误,请各位前辈指出
    2021-10-10
  • 软件开发七大过程模型

    软件开发七大过程模型

    这篇文章主要介绍了Java七大过程模型详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-08-08
  • 浅谈JavaIO之try with底层原理

    浅谈JavaIO之try with底层原理

    众所周知,所有被打开的系统资源,比如流、文件或者Socket连接等,都需要被开发者手动关闭,否则随着程序的不断运行,资源泄露将会累积成重大的生产事故。本文将介绍JavaIO之try with底层原理。
    2021-06-06

最新评论