成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何優雅構建自定義 Spring Boot 驗證器,讓你的代碼更加絲滑!

開發 前端
作為一名開發人員,你應該知道確保應用程序中流動的數據的準確性和完整性是多么重要。Spring Boot提供了強大的驗證功能,但有時我們需要額外的驗證,創建適合特定需求的自定義驗證器。

介紹

作為一名開發人員,你應該知道確保應用程序中流動的數據的準確性和完整性是多么重要。Spring Boot提供了強大的驗證功能,但有時我們需要額外的驗證,創建適合特定需求的自定義驗證器。

接下來,我們來介紹下如何完整的創建一個自定義驗證器。

步驟1:準備Spring Boot應用程序

首先,確保你已經設置了一個Spring Boot項目。可以選擇使用Maven或Gradle作為構建工具。在項目的配置文件(pom.xml或build.gradle)中包含必要的依賴項,如spring-boot-starter-web和
spring-boot-starter-validation。

步驟2:創建模型類

創建一個模型類來表示要驗證的數據。例如,創建一個簡單的User類,包含一個用戶名和電子郵件字段:

public class User {
    private String username;
    private String email;

    // getters and setters
}

步驟3:創建自定義驗證器

接下來,通過實現org.springframework.validation.Validator接口來創建一個自定義驗證器類。該接口定義了supports()和validate()兩個方法。

supports()方法檢查驗證器是否支持給定的類。在我們的例子中,我們想要驗證User類,所以如果提供的類是User類或其子類之一,則該方法應返回true。

validate()方法執行實際的驗證邏輯,我們可以訪問正在驗證的對象,執行檢查,并使用
org.springframework.validation.Errors對象添加驗證錯誤。

以下是User類的自定義驗證器示例:

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方法來實例化自定義驗證器。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.validation.Validator;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;

@Configuration
public class AppConfig {

    @Bean
    public Validator validator() {
        return new UserValidator();
    }

    // 其他配置類和方法...
}

步驟5:使用自定義驗證器

要將自定義驗證器應用于所需的端點,需要使用@Valid注解相應的方法參數,來觸發該對象的驗證過程。例如,有一個用于創建新用戶的RESTful端點:

@RestController
@RequestMapping("/users")
public class UserController {

    @PostMapping
    public ResponseEntity<String> createUser(@Valid @RequestBody User user) {
        // 處理用戶創建邏輯

        return ResponseEntity.ok("User created successfully");
    }
}

在這個例子中,對user參數使用@Valid注解表示應該使用注冊的自定義驗證器進行驗證。

步驟6:提供錯誤消息

為了給自定義驗證約束提供有意義的錯誤消息,需要在項目的src/main/resources目錄中創建一個messages.properties文件。該文件用于不同的驗證約束定義自定義錯誤消息。打開messages.properties文件并添加以下條目:

# 自定義錯誤消息
NotEmpty.user.username=Username cannot be empty
NotEmpty.user.email=Email cannot be empty
Size.userForm.username=Username must be at least 5 characters long

在上面的示例中,我們為NotEmpty和Size約束定義了錯誤消息。

步驟7:測試自定義驗證器

現在,我們可以通過觸發驗證過程來測試自定義驗證器。如果發生任何驗證錯誤,它們將自動添加到BindingResult對象中。例如,假設有一個用于創建新用戶的請求:

POST /users
Content-Type: application/json

{
  "username": "",
  "email": "test@example.com"
}

當發送這個請求時,驗證過程將被觸發,如果用戶名字段為空,將會向BindingResult中添加一個驗證錯誤。

為了處理驗證錯誤,我們可以修改UserController中的createUser方法,如下所示:

@PostMapping
public 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對象中檢索錯誤。然后,根據應用程序的需求處理和處理這些錯誤。

這樣,我們已經成功地在Spring Boot應用程序中創建并使用了自定義驗證器。自定義驗證器允許我們為特定字段或對象定義自己的驗證邏輯和錯誤消息,從而控制驗證過程。

責任編輯:華軒 來源: 今日頭條
相關推薦

2022-08-28 10:08:53

前端代碼前端

2021-11-17 08:16:03

內存控制Go

2021-07-14 13:46:28

KubeVela阿里云容器

2022-09-19 15:02:24

C語言

2021-01-14 09:59:07

JS代碼編碼

2023-03-15 15:54:36

Java代碼

2022-03-07 07:33:24

Spring自定義機制線程池

2025-04-29 07:44:26

配置校驗機制

2025-03-11 08:30:00

Pythonretrying代碼

2025-03-03 12:00:00

JavaScriptfor 循環語言

2024-10-14 17:18:27

2022-06-01 21:54:32

Dragover元素web

2022-06-27 08:16:34

JSON格式序列化

2025-03-10 01:00:00

Spring參數解析器

2023-09-27 07:49:23

2021-03-26 20:37:14

Prometheus監控指標

2023-10-06 20:46:27

開發工具開發代碼

2021-11-19 22:45:14

Windows系統數據

2023-11-18 09:07:59

Go語言技巧

2023-09-13 16:34:47

Java工具開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品四区 | 亚洲一二三区av | www.日本国产| 亚洲入口 | 精久久 | 亚洲一区二区三区在线视频 | 亚洲国产一区视频 | 99久久久久久久 | 一区二区三区在线播放视频 | 亚洲欧美在线观看 | 国产日韩欧美在线观看 | 亚洲人成人一区二区在线观看 | 日韩中文字幕一区二区三区 | www亚洲免费国内精品 | 久久精品亚洲成在人线av网址 | 别c我啊嗯国产av一毛片 | 国产一级片 | 欧美视频一区二区三区 | 丁香五月网久久综合 | 中文字幕免费视频 | 久久久xx | 日韩国产一区二区三区 | 亚洲精品乱码久久久久久9色 | 国产日韩一区二区 | 欧美一级在线免费 | 少妇无套高潮一二三区 | 蜜桃av一区二区三区 | 免费a大片| 亚洲一区二区三区四区五区午夜 | 91视频88av| 日日草天天干 | 91精品国产综合久久久久 | 玖玖精品视频 | 国内精品久久久久久 | 天天插日日操 | 99精品国产一区二区三区 | 亚洲电影第1页 | 亚洲三区在线 | 视频在线一区二区 | 亚洲第一天堂无码专区 | 国产三级精品三级在线观看四季网 |