详解Spring中@Valid和@Validated注解用法

下面是一份详解Spring中@Valid和@Validated注解用法的完整攻略。

什么是@Valid和@Validated

在Spring框架中,我们经常会使用Controller层来接收前端发送的HTTP请求,处理业务逻辑并返回响应。而在参数校验环节,我们就可以使用@Valid和@Validated注解,实现自动校验请求参数的功能。

@Valid注解用于验证Java Bean对象,@Validated注解用于验证普通数据类型。它们都可以通过@Inject或@Autowired来获取Spring中的validator实例,并自动进行数据验证。

@Valid和@Validated的具体应用

@Valid注解用于Java Bean对象的验证

我们可以在Java Bean对象中使用JSR 303规范定义的注解来标注属性校验规则,例如:

public class User {
    @NotBlank(message = "用户名不能为空")
    private String username;
    @Size(max = 20, message = "密码长度不能超过20位")
    private String password;
    @Email(message = "电子邮件格式不正确")
    private String email;
    //省略getter和setter
}

在Controller层的方法参数中使用@Valid注解,即可实现Java Bean对象数据校验:

@RequestMapping("/register")
@ResponseBody
public String register(@Valid User user) {
    //处理注册的业务逻辑
    return "success";
}

如果存在校验失败的情况,Spring会自动将错误信息存储在Errors或BindingResult对象中,并将其作为ModelAndView的属性返回给前端,代码如下:

@RequestMapping("/register")
@ResponseBody
public String register(@Valid User user, BindingResult result) {
    if (result.hasErrors()) {
        //返回错误信息给前端
        return result.getAllErrors().toString();
    }
    //处理注册的业务逻辑
    return "success";
}

@Validated注解用于普通数据类型的验证

与@Valid注解不同,@Validated注解适用于验证普通数据类型,例如:

public interface UserService {
    void updateUserEmail(@NotNull Integer userId, @Email String email);
}

在Controller层中,我们可以在方法参数上使用@Validated和@ControllerAdvice注解,对普通数据类型进行校验,例如:

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public String handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
        return e.getBindingResult().getAllErrors().toString();
    }
}

@RestController
@RequestMapping("/user")
public class UserController {
    @PostMapping("/update/email")
    public String updateUserEmail(@RequestParam @NotNull Integer userId, @RequestParam @Email String email) {
        //调用Service层的业务逻辑
        userService.updateUserEmail(userId, email);
        return "success";
    }
}

在以上的代码中,MethodArgumentNotValidException将被全局异常处理器GlobalExceptionHandler捕获到,可以在其中编写自己的异常处理逻辑。

总结

以上就是关于Spring中@Valid和@Validated注解用法的完整攻略,通过本文的讲解,你应该能够掌握@Valid和@Validated注解的具体用法,并在实际开发中灵活运用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Spring中@Valid和@Validated注解用法 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java编程简单应用

    Java编程简单应用攻略 如果你想学习Java编程,以下是一些简单的步骤和示例说明,可帮助你入门。 安装Java 要开始编写Java应用程序,你需要安装Java开发工具包(Java Development Kit, JDK)。你可以在Oracle官方网站下载最新版本的JDK。 下载完成后,按照安装向导完成JDK的安装。安装完成后,通过在命令行中输入以下命令来…

    Java 2023年5月19日
    00
  • 深入解析JVM对dll文件和对类的装载过程

    下面我将为您详细讲解“深入解析JVM对dll文件和对类的装载过程”的完整攻略。 简介 Java虚拟机(JVM)是Java程序运行的重要环境,其中包括了对类的装载技术。在Java的运行期间,JVM会将.class文件装载进内存中,而在Windows系统中,则会涉及到装载.dll文件。下面将具体讲解JVM对dll文件和类的装载过程。 DLL文件装载过程 在Win…

    Java 2023年5月26日
    00
  • Struts2实现对action请求对象的拦截操作方法

    Struts2的拦截器机制 Struts2采用拦截器机制来对用户发出的请求进行拦截、处理和响应。拦截器是一组批处理过程,你可以在任何一个拦截器中编写你自己的代码,来处理对应的请求。例如,对于用户登录请求,可以通过拦截器机制进行身份验证。 实现对action请求对象的拦截操作 通过写一个继承自Interceptor抽象类的拦截器,并实现intercept方法,…

    Java 2023年5月20日
    00
  • SpringBoot log打印及输出方式

    SpringBoot是一种快速构建基于Spring框架的应用程序的框架。在应用程序的开发和维护过程中,日志是必不可少的工具。SpringBoot提供了许多日志框架,如Logback、Log4j2和Java Util Logging等。本篇攻略将详细讲解SpringBoot log打印及输出方式,如下: 日志输出级别 SpringBoot使用Logback作为…

    Java 2023年5月26日
    00
  • JSP中使用JDBC访问SQL Server 2008数据库示例

    下面是详细的JSP使用JDBC访问SQL Server 2008数据库的攻略。 环境准备 安装SQL Server 2008数据库,并创建一个数据库。 下载并安装SQL Server 2008 JDBC驱动包。下载地址:https://www.microsoft.com/zh-CN/download/details.aspx?id=21599 配置Eclip…

    Java 2023年6月15日
    00
  • Java的DataInputStream和DataOutputStream数据输入输出流

    DataInputStream和DataOutputStream是Java中常用的数据输入输出流,它们提供了一种用于串行化和反串行化基本java数据类型的方法。在处理二进制数据时,这两个类可以很好的对数据进行读和写操作。下面就来详细讲解这两个输入输出流的使用。 DataInputStream DataInputStream是一种基于字节流的数据输入流。在使用…

    Java 2023年5月26日
    00
  • SpringBoot JPA懒加载失效的解决方案(亲测有效)

    下面我将详细讲解“SpringBoot JPA懒加载失效的解决方案(亲测有效)”的完整攻略。 1. 问题描述 在使用SpringBoot框架中,我们常常会使用JPA来进行数据持久化操作,而在使用JPA的过程中,我们可能会遇到懒加载失效的问题。具体来说,就是当我们使用懒加载的注解(如@OneToMany)来关联查询两个实体类时,有时候却发现第二个实体类并没有进…

    Java 2023年5月20日
    00
  • Java–SSH,SSM和Spring Boot框架区别及优缺点说明

    Java–SSH,SSM和Spring Boot框架区别及优缺点说明 Java作为一门比较成熟的编程语言,有很多框架供我们使用。其中,SSH、SSM和Spring Boot是比较流行的三种框架。本文将从以下几个方面分别介绍它们的区别以及优缺点。 SSH框架 介绍 SSH框架指的是基于Spring、Spring MVC和Hibernate三个框架进行整合的系…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部