在 Java 中,“Field 字段校验”通常有两种常见场景:
下面分别说明。
这是最标准、最常用的方式。
import javax.validation.constraints.*;
public class User {
@NotNull(message = "用户名不能为空")
private String username;
@Min(value = 18, message = "年龄不能小于18")
private int age;
@Email(message = "邮箱格式不正确")
private String email;
// getter / setter
}
@PostMapping("/user")
public String addUser(@Valid @RequestBody User user,
BindingResult result) {
if (result.hasErrors()) {
return result.getFieldError().getDefaultMessage();
}
return "success";
}
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<User>> violations = validator.validate(user);
| 注解 | 说明 |
|---|---|
| @NotNull | 不能为 null |
| @NotEmpty | 不能为空(集合/字符串) |
| @NotBlank | 字符串非空白 |
| @Size | 长度范围 |
| @Min / @Max | 数值范围 |
| @Pattern | 正则校验 |
| 邮箱 | |
| @Past / @Future | 日期 |
适合:写框架、工具类、动态校验
import java.lang.reflect.Field;
public class FieldValidator {
public static void validate(Object obj) throws IllegalAccessException {
Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
Object value = field.get(obj);
if (value == null) {
throw new RuntimeException(field.getName() + " 不能为空");
}
}
}
}
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = PhoneValidator.class)
public @interface Phone {
String message() default "手机号格式错误";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
public class PhoneValidator implements ConstraintValidator<Phone, String> {
public boolean isValid(String value, ConstraintValidatorContext context) {
return value != null && value.matches("^1[3-9]\\d{9}$");
}
}
✅ 业务开发:用 @Valid + 注解
✅ 工具/框架:用反射 + 自定义逻辑
✅ 复杂规则:自定义 Validator
如果你能说明:
我可以给你更具体的代码示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。