public class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
第四步 创建类实现Validator接口,实现接口方法指定校验规则
import org.springframework.validation.Errors;import org.springframework.validation.ValidationUtils;import org.springframework.validation.Validator;public class PersonValidator implements Validator { @Override public boolean supports(Class<?> clazz) { return Person.class.equals(clazz); } @Override public void validate(Object object, Errors errors) { ValidationUtils.rejectIfEmpty(errors, "name", "name.empty"); Person p = (Person) object; if (p.getAge() < 0) { errors.rejectValue("age", "error value < 0"); } else if (p.getAge() > 110) { errors.rejectValue("age", "error value too old"); } }}
@Configuration@ComponentScan("com.codermast.spring")public class ValidationConfig { @Bean public LocalValidatorFactoryBean validator() { return new LocalValidatorFactoryBean(); }}
第二步 创建实体类,使用注解定义校验规则
import jakarta.validation.constraints.Max;import jakarta.validation.constraints.Min;import jakarta.validation.constraints.NotNull;public class User { @NotNull private String name; @Min(0) @Max(120) private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;@Configuration@ComponentScan("com.atguigu.spring6.validation.method3")public class ValidationConfig { @Bean public MethodValidationPostProcessor validationPostProcessor() { return new MethodValidationPostProcessor(); }}
第二步 创建实体类,使用注解设置校验规则
package com.atguigu.spring6.validation.method3;import jakarta.validation.constraints.*;public class User { @NotNull private String name; @Min(0) @Max(120) private int age; @Pattern(regexp = "^1(3|4|5|7|8)\\d{9}$",message = "手机号码格式错误") @NotBlank(message = "手机号码不能为空") private String phone; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; }}
第三步 定义Service类,通过注解操作对象
import jakarta.validation.Valid;import jakarta.validation.constraints.NotNull;import org.springframework.stereotype.Service;import org.springframework.validation.annotation.Validated;@Service@Validatedpublic class MyService { public String testParams(@NotNull @Valid User user) { return user.toString(); }}
第四步 测试
import org.junit.jupiter.api.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class TestMethod3 { @Test public void testMyService1() { ApplicationContext context = new AnnotationConfigApplicationContext(ValidationConfig.class); MyService myService = context.getBean(MyService.class); User user = new User(); user.setAge(-1); myService.testParams(user); }}