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

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

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

介绍

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

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

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

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

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

步骤2:创建模型类

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

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

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

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

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

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

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

步骤6:提供错误消息

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

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

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

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • 6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月份有一个618,虽然这是京东周年庆的日子,但别的电商也都不约而同的跟进了,反正促销没坏处,厂商和用户都能满意。618期间一些产品也出现了历史低价,那么各个价位段的产品性价比
  • 雅柏威士忌多款单品价格大跌,泥煤顶流也不香了?

    来源 | 烈酒商业观察编 | 肖海林今年以来,威士忌市场开始出现了降温迹象,越来越多不断暴涨的网红威士忌也开始悄然回归市场理性。近日,LVMH集团旗下苏格兰威士忌品牌雅柏(Ardbeg
  • 梁柱接棒两年,腾讯音乐闯出新路子

    文丨田静 出品丨牛刀财经(niudaocaijing)7月5日,企鹅FM发布官方公告称由于业务调整,将于9月6日正式停止运营,这意味着腾讯音乐长音频业务走向消亡。腾讯在长音频领域还在摸索。为
  • 拼多多APP上线本地生活入口,群雄逐鹿万亿市场

    Tech星球(微信ID:tech618)文 | 陈桥辉 Tech星球独家获悉,拼多多在其APP内上线了&ldquo;本地生活&rdquo;入口,位置较深,位于首页的&ldquo;充值中心&rdquo;内,目前主要售卖美食相关的
  • 花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    来源:极点商业作者:杨铭在淘宝购买珠宝玉石后,因为保证金不够赔付,店铺关闭,退货退款难、维权无门的比比皆是。&ldquo;提供相关产品鉴定证书,支持全国复检,可以30天无理由退换货。&
  • 当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己&ldquo;当家&rdquo;的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 7月4日见!iQOO 11S官宣:“鸡血版”骁龙8 Gen2+200W快充加持

    上半年已接近尾声,截至目前各大品牌旗下的顶级旗舰都已悉数亮相,而下半年即将推出的顶级旗舰已经成为了数码圈爆料的主流,其中就包括全新的iQOO 11S系
  • 首发天玑9200+ iQOO Neo8系列发布首销售价2299元起

    2023年5月23日晚,iQOO Neo8系列正式发布。其中,Neo系列首款Pro之作——iQOO Neo8 Pro强悍登场,限时售价3099元起;价位段最强性能手机iQOO Neo8同期上市
Top