介紹
Spring Boot Starter Validation是一個Spring Boot模塊,用于簡化應用程序中的驗證功能。它包含以下依賴:
- Hibernate Validator:Hibernate Validator是JavaBean Validation(JSR 380)規范的參考實現,提供了一組用于驗證Java對象的約束和注解。
- javax.validation API:javax.validation API是JavaBean Validation的API,定義了可用于驗證的約束和注解集。
- Spring Validation:Spring Validation是一個模塊,用于將JavaBean Validation與Spring Framework集成,包括對方法參數和返回值的驗證支持。
注解全解
使用Spring Boot Starter Validation,您可以輕松地將驗證功能添加到應用程序中。以下是一些常見的驗證注解:
- @Null:被注釋的元素必須為null。
- @NotNull:被注釋的元素必須不為null。
- @AssertTrue:被注釋的元素必須為true。
- @AssertFalse:被注釋的元素必須為false。
- @Min(value):被注釋的元素必須是一個數字,其值必須大于或等于指定的最小值。
- @Max(value):被注釋的元素必須是一個數字,其值必須小于或等于指定的最大值。
- @Size(min, max):被注釋的元素必須是一個字符串、集合、數組或映射,其大小必須在指定的最小和最大值之間。
- @Pattern(regexp):被注釋的元素必須是一個字符串,并且必須與指定的正則表達式匹配。
- @Valid:被注釋的元素必須是一個有效的對象,其所有約束都必須通過驗證。
以下是一個使用Spring Boot Starter Validation的示例:
首先,在Spring Boot應用程序中添加以下依賴:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>
接下來,創建一個包含驗證注解的JavaBean:
public class Person {@NotNull@Size(min = 2, max = 50)private String name;@Min(18)@Max(100)private int age;// getters and setters
}
然后,在控制器中使用@Valid注解來驗證JavaBean:
@RestController
public class PersonController {@PostMapping("/persons")public ResponseEntity createPerson(@Valid @RequestBody Person person) {// Do something with the person objectreturn ResponseEntity.ok().build();}
}
最后,當調用createPerson方法時,Spring Boot將自動驗證Person對象,如果驗證失敗,將返回一個400錯誤響應。
@Valid和@Pattern(regexp)是Spring Boot Starter Validation中兩個常見的驗證注解,用于驗證Java對象和字符串。
@Valid
@Valid是一個用于在控制器方法參數上啟用驗證的注解。當在控制器方法參數上使用@Valid注解時,Spring Boot將自動驗證該參數的所有約束,如果驗證失敗,則返回一個400錯誤響應。
例如,在下面的示例中,Person對象包含@NotNull和@Size注解,用于驗證name屬性。在PersonController中,使用@Valid注解來驗證Person對象:
public class Person {@NotNull@Size(min = 2, max = 50)private String name;// getters and setters
}@RestController
public class PersonController {@PostMapping("/persons")public ResponseEntity createPerson(@Valid @RequestBody Person person) {// Do something with the person objectreturn ResponseEntity.ok().build();}
}
當調用createPerson方法時,Spring Boot將自動驗證Person對象的name屬性,如果name為null或長度不在2到50之間,則返回一個400錯誤響應。
@Pattern(regexp)
@Pattern(regexp)是一個用于驗證字符串是否匹配指定正則表達式的注解。在使用@Pattern(regexp)注解時,需要提供一個regexp屬性,用于指定正則表達式。
例如,在下面的示例中,使用@Pattern(regexp)注解來驗證email屬性是否符合電子郵件地址的格式:
public class Person {@Pattern(regexp = "^[\\w!#$%&'*+/=?`{|}~^-]+(?:\\.[\\w!#$%&'*+/=?`{|}~^-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$")private String email;// getters and setters
}
當驗證Person對象時,Spring Boot將自動驗證email屬性是否符合指定的正則表達式。如果不符合,則返回一個400錯誤響應。
需要注意的是,在使用@Pattern(regexp)注解時,正則表達式可能會很復雜,因此需要仔細測試和驗證。同時,也需要注意正則表達式的性能問題,避免使用過于復雜的正則表達式導致驗證性能下降。
總之,@Valid和@Pattern(regexp)是Spring Boot Starter Validation中兩個常見的驗證注解,用于驗證Java對象和字符串。它們可以幫助我們簡化應用程序中的驗證功能,提高代碼的可讀性和可維護性。