详解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的nio的使用示例分享

    Java NIO的使用示例分享 Java NIO(New IO)是从Java 1.4版本引入的替代标准IO的API,它提供了更快的IO操作,包括文件操作、网络操作等。本篇文章将详细介绍Java NIO的使用示例。 NIO基础知识 NIO的核心是缓冲区(Buffer)和通道(Channel)。缓冲区是一个对象,在IO操作中作为数据容器使用,通道则是表示和数据源…

    Java 2023年5月20日
    00
  • Java多线程Callable接口实现代码示例

    下面是Java多线程Callable接口实现的完整攻略步骤: 1.什么是Callable接口 Callable和Runnable类似,都是用来创建线程的接口,但是Callable的call()方法有返回值,并且可以抛出异常。 public interface Callable<V> { V call() throws Exception; } 2…

    Java 2023年5月19日
    00
  • java实现遍历树形菜单两种实现代码分享

    下面我将详细讲解Java实现遍历树形菜单的两种实现代码分享,包括以下内容: 遍历算法的概念 遍历树形菜单的两种实现方式 示例代码和详细解释 一、什么是遍历算法? 在讲解树形菜单的遍历算法之前,我们先来了解一下遍历算法的概念。 遍历算法是对数据结构中所有元素进行无遗漏且不重复的访问,以达到数据处理的目标。 在树形菜单的遍历中,我们需要访问每一个节点,以获取每个…

    Java 2023年5月20日
    00
  • Java开发druid数据连接池maven方式简易配置流程示例

    如您所说,本人将为您提供Java开发druid数据连接池maven方式简易配置流程示例的完整攻略。 一、引入druid连接池的maven依赖 首先,在Java项目的pom.xml文件中引入druid连接池的maven依赖。示例如下: <dependency> <groupId>com.alibaba</groupId> &…

    Java 2023年5月20日
    00
  • Java之SpringBoot实现基本增删改查(前后端分离版)

    Java之SpringBoot实现基本增删改查(前后端分离版)攻略 简介 本篇攻略主要介绍如何使用SpringBoot实现前后端分离模式下的基本增删改查操作。在本文中,我们将使用MySQL数据库和Vue.js作为前端技术栈。此外,后端所使用的工具主要有SpringBoot、MyBatis和Swagger。在完成本文所述内容之前,请确保你已完成以下几个环节: …

    Java 2023年5月15日
    00
  • Spring Boot 在启动时进行配置文件加解密的方法详解

    下面我将为您详细讲解“Spring Boot 在启动时进行配置文件加解密的方法详解”。 背景 在我们项目中,一般都会有敏感信息,如数据库密码、密钥等,而这些敏感信息往往存在于配置文件中,这就带来了安全性风险。为了解决这个问题,我们可以在项目启动时进行配置文件的加密和解密,以提高项目的安全性。 原理 Spring Boot 启动时会通过 Environment…

    Java 2023年6月15日
    00
  • Java中调用SQL Server存储过程详解

    Java调用SQL Server存储过程的步骤如下: 1.首先,要在Java中连接数据库 这里使用JDBC连接SQL Server数据库,示例代码如下: import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class C…

    Java 2023年5月20日
    00
  • Spring Security密码解析器PasswordEncoder自定义登录逻辑

    下面是详细讲解“Spring Security密码解析器PasswordEncoder自定义登录逻辑”的完整攻略: 1. 理解PasswordEncoder和其实现类 PasswordEncoder是Spring Security中的一个接口,用于加密和解密用户登录密码,在用户登录过程中用于比对用户输入的密码和数据库中存储的加密后的密码是否一致。 Sprin…

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