10:@Validated和@Valid-Java Spring

简介: 10:@Validated和@Valid-Java Spring

10.1 @Valid

@Valid 是 Hibernate validation 提供的注解,表示开启Hibernate validation 的校验机制,所属包为javax.validation.Valid

作为标准JSR-303规范,用来标记验证属性和方法返回值,进行级联和递归校验,没有分组功能

@Valid注解对数据模型实现验证,可在方法参数中自动注入BindingResult对象,用于接收校验结果,如果有不合法的参数,从中取出结果信息并返回给前端页面

10.2 @Validated

@Validated是Spring Validator提供的注解,表示开启Spring的校验机制

作为标准JSR-303的补充,提供了groups属性分组功能,可根据不同的分组采用不同的校验机制

@Validation是对@Valid的二次封装,在使用上没有区别,但两者功能不一样

10.2 区别

注解位置

  • @Valid 可用于方法、字段、枚举、构造器、方法参数上
  • @Validated 可用于接口、类、枚举、注解、方法、方法参数上

分组校验

  • @Valid 没有分组功能
  • @Validated 提供分组功能

方法级别

  • @Valid 可用在属性级别约束,表示级联校验。
  • @Validated 可用于类级别约束,表示Spring进行方法级别的参数校验

嵌套验证

  • @Valid 作用于成员属性上,嵌套验证功能
  • @Validated 不能作用于成员属性上,无嵌套验证功能,需配合@Valid注解进行嵌套验证

10.2 Controller参数校验

在Spring Mvc中可以使用@Validated和@Valid两个注解来校验Controller方法参数,校验的顺序是随机的,程序不能依赖校验的顺序去做相关的逻辑处理

@Valid注解表示开启Hibernate的校验机制,@Validated注解表示开启Spring的校验机制。

@RestController
public class Controller {
    @RequestMapping("/test")
    public User test(@Validated User user, BindingResult result) {
        if (result.hasErrors()) {
            List<ObjectError> errors = result.getAllErrors();
            for (ObjectError error : errors) {
                System.out.println(error.getDefaultMessage());
            }
        }
        return user;
    }
}

Controller层的方法的要校验的参数上添加@Validated/@Valid注解注解,并且需要传入BindingResult对象,当参数不符时,该对象用于获取校验失败情况下的反馈信息

如果没有BindingResult对象,当参数不符时,将返回400 Bad Request状态码

校验注解

注解 说明
@NotNull/@Null 验证注解的元素值不是/是null
@AssertFalse/@AssertTrue 验证注解的元素值是false/true
@Max(value)/@Min(value) 验证注解的元素大于/小于值(value)
@Past/@Future 验证注解的元素比当前日期早/晚
@Email 验证注解的元素必须是Email
@NotEmpty 验证注解的元素值不为null,但长度不能为0
@NotBlank 验证注解的元素值不为null,但去除字符串的空格后长度不能为0,只应用于字符串


目录
相关文章
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
76 2
|
25天前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
46 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
1月前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
218 12
基于开源框架Spring AI Alibaba快速构建Java应用
|
2月前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
92 1
Spring 框架:Java 开发者的春天
|
2月前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。
|
2月前
|
JSON Java Maven
实现Java Spring Boot FCM推送教程
本指南介绍了如何在Spring Boot项目中集成Firebase云消息服务(FCM),包括创建项目、添加依赖、配置服务账户密钥、编写推送服务类以及发送消息等步骤,帮助开发者快速实现推送通知功能。
119 2
|
1月前
|
Java 数据库连接 API
Spring 框架的介绍(Java EE 学习笔记02)
Spring是一个由Rod Johnson开发的轻量级Java SE/EE一站式开源框架,旨在解决Java EE应用中的多种问题。它采用非侵入式设计,通过IoC和AOP技术简化了Java应用的开发流程,降低了组件间的耦合度,支持事务管理和多种框架的无缝集成,极大提升了开发效率和代码质量。Spring 5引入了响应式编程等新特性,进一步增强了框架的功能性和灵活性。
49 0
|
2月前
|
存储 人工智能 Java
将 Spring AI 与 LLM 结合使用以生成 Java 测试
AIDocumentLibraryChat 项目通过 GitHub URL 为指定的 Java 类生成测试代码,支持 granite-code 和 deepseek-coder-v2 模型。项目包括控制器、服务和配置,能处理源代码解析、依赖加载及测试代码生成,旨在评估 LLM 对开发测试的支持能力。
56 1
|
3月前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
2977 14
|
2月前
|
Java BI 调度
Java Spring的定时任务的配置和使用
遵循上述步骤,你就可以在Spring应用中轻松地配置和使用定时任务,满足各种定时处理需求。
166 1