温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Field字段如何校验

发布时间:2026-10-06 22:44:16 来源:亿速云 阅读:84 作者:小樊 栏目:编程语言

在 Java 中,“Field 字段校验”通常有两种常见场景:

  1. Java Bean / 实体类字段校验(最常用)
  2. 通过反射对 Field 本身进行校验(框架或工具开发)

下面分别说明。


一、Java Bean 字段校验(推荐使用)

1️⃣ 使用 JSR-380(Bean Validation,如 Hibernate Validator)

这是最标准、最常用的方式。

示例

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
}

校验方式(Spring 环境)

@PostMapping("/user")
public String addUser(@Valid @RequestBody User user, 
                      BindingResult result) {
    if (result.hasErrors()) {
        return result.getFieldError().getDefaultMessage();
    }
    return "success";
}

手动校验(非 Spring)

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();

Set<ConstraintViolation<User>> violations = validator.validate(user);

2️⃣ 常用注解汇总

注解 说明
@NotNull 不能为 null
@NotEmpty 不能为空(集合/字符串)
@NotBlank 字符串非空白
@Size 长度范围
@Min / @Max 数值范围
@Pattern 正则校验
@Email 邮箱
@Past / @Future 日期

二、使用反射校验 Field(高级用法)

适合:写框架、工具类、动态校验

示例:非空校验

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() + " 不能为空");
            }
        }
    }
}

三、自定义字段校验(注解)

1️⃣ 定义注解

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = PhoneValidator.class)
public @interface Phone {
    String message() default "手机号格式错误";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

2️⃣ 校验逻辑

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

如果你能说明:

  • 是 Spring / Spring Boot?
  • 是请求参数 / 数据库实体 / 配置文件?
  • 想做哪种校验?

我可以给你更具体的代码示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手