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

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

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

介绍

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

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

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

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

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

步骤2:创建模型类

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

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

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

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

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

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

以下是User类的自定义验证器示例:3vh28资讯网——每日最新资讯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方法来实例化自定义验证器。3vh28资讯网——每日最新资讯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端点:3vh28资讯网——每日最新资讯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注解表示应该使用注册的自定义验证器进行验证。3vh28资讯网——每日最新资讯28at.com

步骤6:提供错误消息

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

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

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

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

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

为了处理验证错误,我们可以修改UserController中的createUser方法,如下所示:3vh28资讯网——每日最新资讯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对象中检索错误。然后,根据应用程序的需求处理和处理这些错误。3vh28资讯网——每日最新资讯28at.com

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

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

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

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

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

标签:
  • 热门焦点
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • 影音体验是真的强 简单聊聊iQOO Pad

    大公司的好处就是产品线丰富,非常细分化的东西也能给你做出来,例如早先我们看到了新的vivo Pad2,之后我们又在iQOO Neo8 Pro的发布会上看到了iQOO的首款平板产品iQOO Pad。虽
  • 石头智能洗地机A10 Plus体验:双向自清洁治好了我的懒癌

    一、前言和介绍专为家庭请假懒人而生的石头科技在近日又带来了自己的全新旗舰新品,石头智能洗地机A10 Plus。从这个产品名上就不难看出,这次石头推出的并不是常见的扫地机器
  • 天猫精灵Sound Pro体验:智能音箱没有音质?来听听我的

    这几年除了手机作为智能生活终端最主要的核心之外,第二个可以成为中心点的产品是什么?——是智能音箱。 手机在执行命令的时候有两种操作方式,手和智能语音助手,而智能音箱只
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein&ldquo;利用市场支配力量强迫服装厂商与之签订独家
  • 年轻人的“职场羞耻感”,无处不在

    作者:冯晓亭 陶 淘 李 欣 张 琳 马舒叶来源:燃次元&ldquo;人在职场,应该选择什么样的着装?&rdquo;近日,在网络上,一个与着装相关的帖子引发关注,在该帖子里,一位在高级写字楼亚洲金
  • iQOO Neo8 Pro抢先上架:首发天玑9200+ 安卓性能之王

    经过了一段时间的密集爆料,昨日iQOO官方如期对外宣布:将于5月23日推出全新的iQOO Neo8系列新品,官方称这是一款拥有旗舰级性能调校的作品。随着发布时
  • 联想的ThinkBook Plus下一版曝光,键盘旁边塞个平板

    ThinkBook Plus 是联想的一个特殊笔记本类别,它在封面放入了一块墨水屏,也给人留下了较为深刻的印象。据有人爆料,联想的下一款 ThinkBook Plus 可能更特殊,它
Top