在 Java 里,“Parameter 参数校验”通常指方法参数(接口/函数入参)的合法性校验。常见做法有以下几种,从简单到规范逐步升级:
public void createUser(String name, int age) {
if (name == null || name.isEmpty()) {
throw new IllegalArgumentException("name 不能为空");
}
if (age < 0 || age > 150) {
throw new IllegalArgumentException("age 不合法");
}
// 业务逻辑
}
✅ 简单直接
❌ 代码冗余、不易维护
@PostMapping("/user")
public void createUser(@Valid @RequestBody UserDTO user) {
// 校验通过后才会进来
}
public class UserDTO {
@NotBlank(message = "用户名不能为空")
private String name;
@Min(0)
@Max(150)
private int age;
}
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public String handleValid(Exception e) {
return "参数错误:" + e.getMessage();
}
}
✅ 标准、清晰、企业级
✅ 支持分组校验、嵌套校验
@Service
@Validated
public class UserService {
public void test(@NotBlank String name) {
}
}
⚠️ 注意:
@Validated 用在 类上@NotBlank、@Min 等@Target({FIELD})
@Retention(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 ctx) {
return value != null && value.matches("^1[3-9]\\d{9}$");
}
}
Assert.notNull(name, "name 不能为空");
AssertUtil.notBlank(name);
| 场景 | 推荐方式 |
|---|---|
| Controller 入参 | @Valid + DTO |
| Service 方法 | @Validated |
| 复杂规则 | 自定义注解 |
| 工具/底层 | 手动 if / Assert |
如果你愿意,可以告诉我:
我可以直接给你一套可复制的代码模板。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。