在 Java 中,“Parameter 参数校验”通常指**方法参数(Method Parameter)或接口请求参数(如 Controller 参数)**的校验。下面按常见场景给你系统讲一下。
public void setAge(int age) {
if (age < 0 || age > 150) {
throw new IllegalArgumentException("年龄不合法");
}
}
✅ 简单直接
❌ 重复代码多、不易维护
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
@PostMapping("/user")
public String addUser(
@RequestParam @NotBlank String name,
@RequestParam @Min(0) @Max(150) int age
) {
return "ok";
}
⚠️ 注意:@RequestParam 参数需要类上加 @Validated
@RestController
@Validated
public class UserController {}
public class UserDTO {
@NotBlank
private String name;
@Min(0)
@Max(150
private int age;
}
@PostMapping("/user")
public String addUser(@Valid @RequestBody UserDTO dto) {
return "ok";
}
❌ 不加 @Valid → 不生效
| 注解 | 说明 |
|---|---|
@NotNull |
不能为 null |
@NotBlank |
字符串非空且去空格后不为空 |
@NotEmpty |
集合 / 数组 / 字符串不为空 |
@Min / @Max |
数值范围 |
@Size |
长度 / 大小 |
@Pattern |
正则 |
@Email |
邮箱 |
@Positive |
正数 |
@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}$");
}
}
@Service
@Validated
public class UserService {
public void create(@NotBlank String name) {}
}
⚠️ 必须加 @Validated,否则不生效
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public String handleValid(MethodArgumentNotValidException e) {
return e.getBindingResult().getFieldError().getDefaultMessage();
}
}
✅ Controller 参数 → @Validated + 注解
✅ DTO → @Valid
✅ 复杂规则 → 自定义注解
❌ 不要在业务里大量 if-else
如果你是 Spring Boot / Spring MVC / 普通 Java 方法 / RPC 参数 哪种场景,可以告诉我,我可以给你更精确的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。