spring boot输入数据校验(validation)的实现过程

yizhihongxing

下面我来给您讲解关于spring boot输入数据校验(validation)的实现过程的完整攻略。

1. 简介

Spring Boot提供了一种简单的方法来在Web应用程序中轻松实现输入数据的校验。它可以通过使用声明式注解进行实现,这些注解在处理表单输入时特别有用。

1.1 常用的校验注解

Spring Boot中常用的校验注解包括:

  • @NotNull:验证对象不为空
  • @NotBlank:验证字符串不为空字符串或null
  • @NotEmpty:验证字符串、集合、map等不为空

1.2 实现方式

Spring Boot提供了两种校验方式:

  • 使用注解实现
  • 自定义实现

2. 使用注解实现

2.1 步骤

使用注解实现输入数据校验的步骤如下:

  1. 导入validation的starter

在pom.xml文件中添加以下依赖:

<!-- validation starter -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
  1. 创建校验实体类

在实体类中使用注解对字段进行校验,例如:

public class User {

    @NotNull(message = "用户名不能为空")
    private String username;

    @NotBlank(message = "密码不能为空")
    private String password;

    @Email(message = "电子邮件地址格式不正确")
    private String email;

    // getter and setter 略去
}
  1. 添加校验逻辑

在Controller中使用@Valid注解对实体进行校验,例如:

@RestController
public class UserController {

    @PostMapping("/users")
    public String createUser(@Valid @RequestBody User user) {
        // 处理用户逻辑
        return "success";
    }
}

2.2 示例

下面展示一个简单的使用注解实现输入数据校验的示例:

  1. 编写实体类
public class User {

    @NotNull(message = "用户名不能为空")
    private String username;

    @NotBlank(message = "密码不能为空")
    private String password;

    @Email(message = "电子邮件地址格式不正确")
    private String email;

    // getter and setter 略去
}
  1. 编写Controller
@RestController
public class UserController {

    @PostMapping("/users")
    public String createUser(@Valid @RequestBody User user) {
        // 处理用户逻辑
        return "success";
    }
}

3. 自定义实现

3.1 步骤

自定义实现输入数据校验的步骤如下:

  1. 实现ConstraintValidator接口
public class AgeValidator implements ConstraintValidator<Age, Integer> {
    private int max;

    @Override
    public void initialize(Age constraintAnnotation) {
        this.max = constraintAnnotation.max();
    }

    @Override
    public boolean isValid(Integer value, ConstraintValidatorContext context) {
        return value >= 0 && value <= max;
    }
}
  1. 编写校验注解类
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {AgeValidator.class})
public @interface Age {

    int max() default 100;

    String message() default "年龄范围错误";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}
  1. 添加校验逻辑

在Controller中使用@Validated注解开启校验,例如:

@RestController
@Validated
public class UserController {

    @PostMapping("/users")
    public String createUser(@Validated @RequestBody User user) {
        // 处理用户逻辑
        return "success";
    }
}

3.2 示例

下面展示一个简单的自定义实现输入数据校验的示例:

  1. 定义校验注解
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {AgeValidator.class})
public @interface Age {

    int max() default 100;

    String message() default "年龄范围错误";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}
  1. 实现ConstraintValidator接口
public class AgeValidator implements ConstraintValidator<Age, Integer> {
    private int max;

    @Override
    public void initialize(Age constraintAnnotation) {
        this.max = constraintAnnotation.max();
    }

    @Override
    public boolean isValid(Integer value, ConstraintValidatorContext context) {
        return value >= 0 && value <= max;
    }
}
  1. 编写实体类
public class User {

    @NotNull(message = "用户名不能为空")
    private String username;

    @NotBlank(message = "密码不能为空")
    private String password;

    @Email(message = "电子邮件地址格式不正确")
    private String email;

    @Age(message = "年龄范围错误")
    private Integer age;

    // getter and setter 略去
}
  1. 编写Controller
@RestController
@Validated
public class UserController {

    @PostMapping("/users")
    public String createUser(@Validated @RequestBody User user) {
        // 处理用户逻辑
        return "success";
    }
}

以上就是使用注解实现和自定义实现输入数据校验的完整攻略,如有疑问请随时提出。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:spring boot输入数据校验(validation)的实现过程 - Python技术站

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

相关文章

  • java表单提交中文乱码的解决方法

    针对Java表单提交中文乱码的解决方法,我们可以从服务器和浏览器两个方面入手,以下是完整的攻略: 一、服务器端解决方案 1.1 设置请求编码与响应编码 在服务器端,我们可以通过设置请求编码和响应编码来解决Java表单提交中文乱码问题。 request.setCharacterEncoding("UTF-8"); response.setC…

    Java 2023年5月20日
    00
  • SpringBoot 集成MongoDB实现文件上传功能

    SpringBoot是一个轻量级的JavaEE(Enterprise Edition)应用程序框架,集成MongoDB实现文件上传功能是一种非常实用的功能。下面,将详细讲解SpringBoot集成MongoDB实现文件上传功能的完整攻略。 创建SpringBoot项目 首先,需要创建一个SpringBoot项目,并添加相应的依赖。 在pom.xml文件中添加…

    Java 2023年6月3日
    00
  • java tapestry5 布局 参数的处理

    下面我将为你详细讲解“Java Tapestry5 布局参数的处理”的完整攻略。 什么是 Tapestry5 布局参数? 在 Tapestry5 中,布局参数是一种可重复利用的组件,在组合多个组件以创建页面模板时特别有用。布局组件提供了一种创建大量页面模板的方法,这些模板共享相同的标头、页脚和菜单结构等元素。 布局参数则是在这些布局组件中动态传递的一些参数,…

    Java 2023年6月15日
    00
  • IDEA创建Java项目文件并运行教程解析

    IDEA创建Java项目文件并运行教程解析 1. 创建Java项目 打开IntelliJ IDEA,点击“Create New Project”。 在弹出的窗口中,选择“Java”并选择项目存放的路径。 选择JDK版本,点击“Next”。 在“Project Name”中填入项目名称,默认为“untitled”,点击“Next”。 配置项目的库文件,可不配置…

    Java 2023年5月26日
    00
  • 2020年支持java8的Java反编译工具汇总(推荐)

    2020年支持java8的Java反编译工具汇总(推荐) Java 反编译工具是程序员进行开发和调试过程中的常用工具。随着 Java 8 的正式发布,越来越多的 Java 异常信息都是由 Java 8 编译后的代码生成的。因此,我们需要支持 Java 8 的 Java 反编译工具来完成我们对代码的调试和分析。下面是一份支持 Java 8 的 Java 反编译…

    Java 2023年5月26日
    00
  • JSP由浅入深(5)—— Scriptlets和HTML的混合

    下面我将为你详细讲解“JSP由浅入深(5)—— Scriptlets和HTML的混合”的完整攻略,包含以下内容: Scriptlets的概念及使用 在Scriptlets中使用Java代码 Scriptlets中的变量声明与使用 Scriptlets与HTML的混合使用 示例说明 1. Scriptlets的概念及使用 Scriptlets是JSP中的一种脚…

    Java 2023年6月15日
    00
  • 详解使用Spring MVC统一异常处理实战

    下面我将为您讲解一下使用 Spring MVC 统一异常处理的完整攻略。 一、概述 在开发过程中,我们经常会遇到各种异常情况,如空指针、数据库连接超时、网络异常等。如果不加处理直接让这些异常直接抛出,会给用户带来不好的用户体验。因此,我们需要对这些异常进行统一处理,以便更好的提示给用户。 Spring MVC 提供了一种统一处理异常的方式,即通过定义一个异常…

    Java 2023年5月27日
    00
  • Spring Boot打包部署和环境配置详解

    SpringBoot打包部署和环境配置详解 SpringBoot是一种快速开发框架,可以帮助我们快速构建Web应用程序。本文将详细讲解SpringBoot打包部署和环境配置的完整攻略,并提供两个示例。 1. 打包SpringBoot应用程序 在SpringBoot中,我们可以使用Maven或Gradle来打包应用程序。以下是一个简单的Maven示例: &lt…

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