详解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经典算法40题(超实用版)

    关于JAVA经典算法40题(超实用版)攻略 简介 本文介绍的是Java经典算法40题的攻略,目的是帮助读者更好地掌握这40道经典的算法问题,并提供解决这些问题的策略和思路。 算法题目 Java经典算法40题包含了数字、字符串、排序等多个方面的问题,下面分别详细介绍这些问题以及其解决思路。 1. 冒泡排序 冒泡排序是一种简单直观的排序算法,其基本思想是通过在相…

    Java 2023年5月19日
    00
  • Java Apache Commons报错“IndexOutOfBoundsException”的原因与解决方法

    当使用Java的Apache Commons类库时,可能会遇到“IndexOutOfBoundsException”错误。这个错误通常由以下原因之一起: 索引越界:如果索引越界,则可能会出现此错误。在这种情况下,需要检查索引以解决此问题。 数组或集合为空:如果数组或集合为空,则可能会出现此错误。在这种情况下,需要确保数组或集合不为空。 以下是两个实例: 例1…

    Java 2023年5月5日
    00
  • JetCache 缓存框架的使用及源码解析(推荐)

    JetCache 缓存框架的使用及源码解析(推荐) 简介 JetCache 是一个基于 Java 语言的高性能缓存框架,具备很高的灵活性和扩展性,可以支持 Redis、Memory、Lru、Caffeine、Tair 等缓存模式。JetCache 提供了基于注解的缓存操作方式,也提供了编程式的缓存操作方式,使用起来非常简单。 安装 在 pom.xml 文件中…

    Java 2023年5月20日
    00
  • SpringBoot security安全认证登录的实现方法

    下面我将为你详细介绍 SpringBoot security 安全认证登录的实现方法,包括登陆拦截、用户角色授权、自定义登录页面、注销等功能的实现方法。 1. 导入 SpringBoot Security 依赖 在 pom.xml 文件中加入以下依赖: <dependency> <groupId>org.springframework…

    Java 2023年5月20日
    00
  • JAVA面试题之Forward与Redirect的区别详解

    JAVA面试题之Forward与Redirect的区别详解 在Java Web开发中,经常会使用到Forward和Redirect这两种方式进行请求转发。它们的实现方式不同,在使用时也需要根据需求选择合适的方式。本文将详细讲解Forward和Redirect的区别以及使用场景。 Forward Forward是什么 Forward是一种请求转发方式,可以将请…

    Java 2023年6月15日
    00
  • javascript中字符串拼接详解

    下面是关于“javascript中字符串拼接详解”的完整攻略: 什么是字符串拼接 在JavaScript中,字符串拼接指将两个或多个字符串连接起来形成一个新的字符串。当需要将字符串组合在一起时,字符串拼接是非常常见的操作。在JavaScript中,字符串拼接有多种方法,我们将逐一介绍。 字符串拼接的基本方法 在JavaScript中,字符串拼接的基本方法是使…

    Java 2023年5月27日
    00
  • Java中的异常处理如何提高程序可读性?

    Java中的异常处理可以提高程序的可读性和可维护性,让程序更加健壮。下面是具体的攻略: 为什么需要异常处理 在Java编程中,我们常常会遇到各种错误和异常的情况,例如空指针、数组越界、文件不存在等等。这些错误和异常都需要被处理,否则就会导致程序崩溃。而异常处理就是为了保证程序在遇到异常时能够正确地响应和处理,从而保证程序的健壮性和可靠性。 异常处理的语法 J…

    Java 2023年4月27日
    00
  • ExtJS下 Ext.Direct加载和提交过程排错小结

    关于“ExtJS下 Ext.Direct加载和提交过程排错小结”的攻略,我将按照以下内容进行详细讲解: Ext.Direct简介 Ext.Direct的加载过程 Ext.Direct的提交过程 Ext.Direct的常见问题及解决方案 示例1:通过Ext.Direct提交表单数据 示例2:使用Ext.Direct加载列表数据 接下来,让我们逐一进行讲解。 1…

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