SpringFramework中的數據校驗方式
更新時間:2024年12月16日 11:20:16 作者:__admin__
這篇文章主要介紹了SpringFramework中的數據校驗方式,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
數據校驗(Validation)
通過Validator接口
引入相關依賴
<dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>7.0.5.Final</version> </dependency> <dependency> <groupId>org.glassfish</groupId> <artifactId>jakarta.el</artifactId> <version>4.0.1</version> </dependency>
實體類
@Data public class Person{ private String name; private String age; }
數據校驗器類
public class PersonValidator implements Validator{ //指定需要校驗的類型 @Override public boolean supports(Class<?> clazz) { return Person.class.equals(clazz); } //校驗規(guī)則 @Override public void validate(Object target, Errors errors) { //name不能為空 ValidationUtils.rejectIfEmpty(errors,"name",errorCode:"name.empty","name is null") //<0age<100 Person p = (Person)target; if(p.getAge()<0){ //參數依次為,需要校驗的屬性,錯誤碼,提示信息 errors.rejectValue("age","age.value.error","age<0") }else if(p.getAge()>100){ errors.rejectValue("age","age.value.error.old","age>100") } } }
測試類
@Test public void test(){ //創(chuàng)建person對象 Person person = new Person(); person.setName("li"); person.setAge(-1); //創(chuàng)建person對應databinder DataBinder binder = new DataBinder(person); //設置校驗器 binder.setValidator(new PersonValidator()); //調用方法執(zhí)行校驗 binder.validate(); //輸出校驗結果 BindingResult result = binder.getBindingResult(); System.out.println(result.getAllErrors()); }
通過Validation注解
配置類,配置LocalValidatorFactoryBean
@Configuration @ComponentScan("com.atli") public class ValidationConfig{ @Bean public LocalValidatorFactoryBean validator(){ return new LocalValidatorFactoryBean(); } }
實體類
/** * 常用注解 * @NotNull:不為空 * @NotEmpty:用于字符串,字符串不為空,長度不為0 * @NotBlank:用于字符串,字符串不為空,trim()后不為空串 * @DecimalMax(value):不大于指定值的數字 * @DecimalMin(value):不小于指定值的數字 * @Max(value):不大于指定值數字 * @Min(value):不小于指定值數字 * @Pattern(value):符合指定正則表達式 * @Size(max,min):字符長度在min到max之間 * @Email:為email格式 */ @Component @Data public class User{ @NotNull private String name; @Min(0) @Max(100) private int age; public User(String name, int age){ this.name=name; this.age=age; } }
校驗器
//原生的校驗器寫法 @Service public class JavaValidation{ @Autowired private Validator validator; public boolean validatorByUser(User user){ Set<ConstraintViolation<User>> validate=validator.validate(user); return validate.isEmpty(); } } //spring的校驗器寫法 @Service public class SpringValidation{ @Autowired private Validator validator; public boolean validatorByUser(User user){ BindException bindException = new BindException(user,user.getName()); validator.validate(user,bindException); return bindException.hasErrors(); } }
測試類
//測試原生校驗器 @Test public void testJavaValidation(){ ApplicationContext context = new AnnotationConfigApplicationContext(ValidationConfig.class); JavaValidation javaValidation = context.getBean(JavaValidation.class); User user = new User("li",-1); boolean message = javaValidation.validatorByUser(user); System.out.println(message); } //測試spring校驗器 @Test public void testJavaValidation(){ ApplicationContext context = new AnnotationConfigApplicationContext(ValidationConfig.class); SpringValidation springValidation = context.getBean(SpringValidation.class); User user = new User("li",-1); boolean message = springValidation.validatorByUser(user); System.out.println(message); }
基于方法實現校驗
配置類
@Configuration @ComponentScan("com.atli") public class ValidationConfig{ @Bean public MethodValidationPostProcessor validationPostProcessor(){ return new MethodValidationPostProcessor(); } }
實體類
@Data public class User{ @NotNull private String name; @Min(0) @Max(100) private int age; public User(String name, int age){ this.name=name; this.age=age; } }
校驗器
@Service @Validated public class UserService{ public String testMethod(@NotNull @Valid User user){ return user.toString(); } }
測試類
@Test public void testJavaValidation(){ ApplicationContext context = new AnnotationConfigApplicationContext(ValidationConfig.class); UserService service = context.getBean(UserServicen.class); User user = new User("li",-1); service.testMethod(user); }
自定義校驗
自定義校驗其實是通過自定義注解的方式來擴展已有的校驗功能以下用校驗沒有空格為例
自定義注解(可以直接在已有注解中改)
@Target({ElementType.METHOD,ElementType.FIELD,ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Constraint(validatedBy={CannotBlankValidation.class}) public @interface CannotBlank{ //默認錯誤提示信息 String message() default "cannot blank" Class<?>[] groups() default{}; Class<? extends Payload>[] payload() default{}; @Target({ElementType.METHOD,ElementType.FIELD,ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface List{ NotNull[] value(); } }
注解解析器
public class CannotBlankValidation implements ConstraintValidator<CannotBlank,String>{ @Override public boolean isValid(String value, ConstraintValidatorContext context){ if(value != null && value.contains(" ")){ return false; } } }
到此這篇關于SpringFramework中的數據校驗方式的文章就介紹到這了,更多相關SpringFramework數據校驗內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:
- 如何解決Could not transfer artifact org.springframework.boot問題
- SpringBoot引入Redis報org.springframework.data.redis.core.RedisTemplate類找不到錯誤問題
- 程序包org.springframework.boot不存在的問題解決
- java:無法訪問org.springframework.boot.SpringApplication問題
- 程序包org.springframework不存在的解決辦法
- org.springframework.web.client.ResourceAccessException資源訪問錯誤的解決方法
- Java報錯:Error:java:?程序包org.springframework.boot不存在解決辦法
相關文章
mybatis mapper.xml獲取insert后的自增ID問題
這篇文章主要介紹了mybatis mapper.xml獲取insert后的自增ID問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05