当前位置:首页 > 科技  > 软件

如何优雅构建自定义 Spring Boot 验证器,让你的代码更加丝滑!

来源: 责编: 时间:2023-10-08 07:05:07 169观看
导读介绍作为一名开发人员,你应该知道确保应用程序中流动的数据的准确性和完整性是多么重要。Spring Boot提供了强大的验证功能,但有时我们需要额外的验证,创建适合特定需求的自定义验证器。接下来,我们来介绍下如何完整的创

介绍

n6t28资讯网——每日最新资讯28at.com

作为一名开发人员,你应该知道确保应用程序中流动的数据的准确性和完整性是多么重要。Spring Boot提供了强大的验证功能,但有时我们需要额外的验证,创建适合特定需求的自定义验证器。n6t28资讯网——每日最新资讯28at.com

接下来,我们来介绍下如何完整的创建一个自定义验证器。n6t28资讯网——每日最新资讯28at.com

步骤1:准备Spring Boot应用程序

首先,确保你已经设置了一个Spring Boot项目。可以选择使用Maven或Gradle作为构建工具。在项目的配置文件(pom.xml或build.gradle)中包含必要的依赖项,如spring-boot-starter-web和
spring-boot-starter-validation。
n6t28资讯网——每日最新资讯28at.com

步骤2:创建模型类

创建一个模型类来表示要验证的数据。例如,创建一个简单的User类,包含一个用户名和电子邮件字段:n6t28资讯网——每日最新资讯28at.com

public class User {    private String username;    private String email;    // getters and setters}

步骤3:创建自定义验证器

接下来,通过实现org.springframework.validation.Validator接口来创建一个自定义验证器类。该接口定义了supports()和validate()两个方法。n6t28资讯网——每日最新资讯28at.com

supports()方法检查验证器是否支持给定的类。在我们的例子中,我们想要验证User类,所以如果提供的类是User类或其子类之一,则该方法应返回true。n6t28资讯网——每日最新资讯28at.com

validate()方法执行实际的验证逻辑,我们可以访问正在验证的对象,执行检查,并使用
org.springframework.validation.Errors对象添加验证错误。
n6t28资讯网——每日最新资讯28at.com

以下是User类的自定义验证器示例:n6t28资讯网——每日最新资讯28at.com

import org.springframework.validation.Errors;import org.springframework.validation.ValidationUtils;import org.springframework.validation.Validator;public class UserValidator implements Validator {    @Override    public boolean supports(Class<?> clazz) {        return User.class.equals(clazz);    }    @Override    public void validate(Object target, Errors errors) {        User user = (User) target;        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "username", "NotEmpty");        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "email", "NotEmpty");        // Add additional validation logic        // Example:        // if (user.getUsername().length() < 5) {        //     errors.rejectValue("username", "Size.userForm.username");        // }    }}

步骤4:注册自定义验证器

为了让Spring Boot知道自定义验证器,我们需要进行注册。打开应用程序的配置类(通常使用@Configuration注解),并添加一个@Bean方法来实例化自定义验证器。n6t28资讯网——每日最新资讯28at.com

import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.validation.Validator;import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;@Configurationpublic class AppConfig {    @Bean    public Validator validator() {        return new UserValidator();    }    // 其他配置类和方法...}

步骤5:使用自定义验证器

要将自定义验证器应用于所需的端点,需要使用@Valid注解相应的方法参数,来触发该对象的验证过程。例如,有一个用于创建新用户的RESTful端点:n6t28资讯网——每日最新资讯28at.com

@RestController@RequestMapping("/users")public class UserController {    @PostMapping    public ResponseEntity<String> createUser(@Valid @RequestBody User user) {        // 处理用户创建逻辑        return ResponseEntity.ok("User created successfully");    }}

在这个例子中,对user参数使用@Valid注解表示应该使用注册的自定义验证器进行验证。n6t28资讯网——每日最新资讯28at.com

步骤6:提供错误消息

为了给自定义验证约束提供有意义的错误消息,需要在项目的src/main/resources目录中创建一个messages.properties文件。该文件用于不同的验证约束定义自定义错误消息。打开messages.properties文件并添加以下条目:n6t28资讯网——每日最新资讯28at.com

# 自定义错误消息NotEmpty.user.username=Username cannot be emptyNotEmpty.user.email=Email cannot be emptySize.userForm.username=Username must be at least 5 characters long

在上面的示例中,我们为NotEmpty和Size约束定义了错误消息。n6t28资讯网——每日最新资讯28at.com

步骤7:测试自定义验证器

现在,我们可以通过触发验证过程来测试自定义验证器。如果发生任何验证错误,它们将自动添加到BindingResult对象中。例如,假设有一个用于创建新用户的请求:n6t28资讯网——每日最新资讯28at.com

POST /usersContent-Type: application/json{  "username": "",  "email": "test@example.com"}

当发送这个请求时,验证过程将被触发,如果用户名字段为空,将会向BindingResult中添加一个验证错误。n6t28资讯网——每日最新资讯28at.com

为了处理验证错误,我们可以修改UserController中的createUser方法,如下所示:n6t28资讯网——每日最新资讯28at.com

@PostMappingpublic ResponseEntity<String> createUser(@Valid @RequestBody User user, BindingResult bindingResult) {    if (bindingResult.hasErrors()) {        // 处理验证错误        List<ObjectError> errors = bindingResult.getAllErrors();        // 按需处理并返回错误消息        // 示例: return ResponseEntity.badRequest().body(errors.toString());    }    // 如果验证通过,继续处理用户创建逻辑    return ResponseEntity.ok("User created successfully");}

在这个例子中,如果存在验证错误,可以使用bindingResult.getAllErrors()从BindingResult对象中检索错误。然后,根据应用程序的需求处理和处理这些错误。n6t28资讯网——每日最新资讯28at.com

这样,我们已经成功地在Spring Boot应用程序中创建并使用了自定义验证器。自定义验证器允许我们为特定字段或对象定义自己的验证逻辑和错误消息,从而控制验证过程。n6t28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-12294-0.html如何优雅构建自定义 Spring Boot 验证器,让你的代码更加丝滑!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 六个为Rust构建的IDE

下一篇: 分享30个避免低级Bug的代码技巧清单!

标签:
  • 热门焦点
  • 卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    在今天的Redmi后性能时代战略发布会结束之后,Redmi总经理卢伟冰又带来了一篇长文,详解了为什么 Redmi 要开启后性能时代?为什么选择和 MediaTek、Pixelworks 深度合作?以及后性
  • Redmi Pad评测:红米充满野心的一次尝试

    Redmi Pad评测:红米充满野心的一次尝试

    从Note系列到K系列,从蓝牙耳机到笔记本电脑,红米不知不觉之间也已经形成了自己颇有竞争力的产品体系,在中端和次旗舰市场上甚至要比小米新机的表现来得更好,正所谓“大丈夫生居
  • 三言两语说透设计模式的艺术-简单工厂模式

    三言两语说透设计模式的艺术-简单工厂模式

    一、写在前面工厂模式是最常见的一种创建型设计模式,通常说的工厂模式指的是工厂方法模式,是使用频率最高的工厂模式。简单工厂模式又称为静态工厂方法模式,不属于GoF 23种设计
  • 量化指标是与非:挽救被量化指标扼杀的技术团队

    量化指标是与非:挽救被量化指标扼杀的技术团队

    作者 | 刘新翠整理 | 徐杰承本文整理自快狗打车技术总监刘新翠在WOT2023大会上的主题分享,更多精彩内容及现场PPT,请关注51CTO技术栈公众号,发消息【WOT2023PPT】即可直接领取
  • 三分钟白话RocketMQ系列—— 如何发送消息

    三分钟白话RocketMQ系列—— 如何发送消息

    我们知道RocketMQ主要分为消息 生产、存储(消息堆积)、消费 三大块领域。那接下来,我们白话一下,RocketMQ是如何发送消息的,揭秘消息生产全过程。注意,如果白话中不小心提到相关代
  • 共享单车的故事讲到哪了?

    共享单车的故事讲到哪了?

    来源丨海克财经与共享充电宝相差不多,共享单车已很久没有被国内热点新闻关照到了。除了一再涨价和用户直呼用不起了。近日多家媒体再发报道称,成都、天津、郑州等地多个共享单
  • 腾讯VS网易,最卷游戏暑期档,谁能笑到最后?

    腾讯VS网易,最卷游戏暑期档,谁能笑到最后?

    作者:无锈钵来源:财经无忌7月16日晚,上海1862时尚艺术中心。伴随着幻象的精准命中,硕大的荧幕之上,比分被定格在了14:12,被寄予厚望的EDG战队以绝对的优势战胜了BLG战队,拿下了总决
  • “买真退假” 这种“羊毛”不能薅

    “买真退假” 这种“羊毛”不能薅

    □ 法治日报 记者 王春   □ 本报通讯员 胡佳丽  2020年初,还在上大学的小东加入了一个大学生兼职QQ群。群主&ldquo;七王&rdquo;在群里介绍一些刷单赚
  • 荣耀Magic4 至臻版 首创智慧隐私通话 强劲影音系统

    荣耀Magic4 至臻版 首创智慧隐私通话 强劲影音系统

    2022年第一季度临近尾声,在该季度内,许多品牌陆续发布自己的最新产品,让大家从全新的角度来了解当今的手机技术。手机是电子设备中,更新迭代十分迅速的一款产品,基
Top