建设银行网站能变更手机号吗,重庆市建设公共资源交易中心网站首页,外贸做的亚马逊网站是哪个,重视网站商务通1. 使用Hibernate Validator进行注解校验
这是Java中最常用的参数校验方式#xff0c;基于JSR 303/JSR 380规范的实现#xff0c;通常结合Valid或Validated注解进行参数校验。
使用步骤#xff1a;
添加依赖#xff08;如果使用Spring Boot#xff0c;通常已经内置了Hi…1. 使用Hibernate Validator进行注解校验
这是Java中最常用的参数校验方式基于JSR 303/JSR 380规范的实现通常结合Valid或Validated注解进行参数校验。
使用步骤
添加依赖如果使用Spring Boot通常已经内置了Hibernate Validator
dependencygroupIdorg.hibernate.validator/groupIdartifactIdhibernate-validator/artifactId
/dependency
在DTO类中使用校验注解
public class UserDTO {NotNull(message 用户名不能为空)Size(min 3, max 20, message 用户名长度必须在3到20之间)private String username;Email(message 邮箱格式不正确)private String email;// 其他字段和getter/setter
}
在Controller中使用Valid或Validated来触发校验
PostMapping(/user)
public ResponseEntityString createUser(Valid RequestBody UserDTO userDTO) {// 如果校验失败会自动抛出异常return ResponseEntity.ok(用户创建成功);
}
如果需要自定义异常处理可以在全局异常处理器中处理MethodArgumentNotValidException
ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntityMapString, String handleValidationExceptions(MethodArgumentNotValidException ex) {MapString, String errors new HashMap();ex.getBindingResult().getAllErrors().forEach(error - {String fieldName ((FieldError) error).getField();String errorMessage error.getDefaultMessage();errors.put(fieldName, errorMessage);});return ResponseEntity.badRequest().body(errors);
}
2. 手动校验
对于复杂的业务逻辑可能需要手动编写校验逻辑。可以通过Java代码在Controller或Service层进行参数的业务校验。
if (userDTO.getUsername() null || userDTO.getUsername().length() 3) {throw new IllegalArgumentException(用户名长度必须大于3);
}
3. 自定义注解
如果Hibernate Validator内置的注解不能满足需求可以自定义校验注解。比如创建一个自定义注解来验证某个字段是否满足自定义规则。
自定义注解示例
创建注解
Target({ ElementType.FIELD, ElementType.PARAMETER })
Retention(RetentionPolicy.RUNTIME)
Constraint(validatedBy CustomValidator.class)
public interface CustomConstraint {String message() default 默认错误信息;Class?[] groups() default {};Class? extends Payload[] payload() default {};
}
创建校验逻辑
public class CustomValidator implements ConstraintValidatorCustomConstraint, String {Overridepublic void initialize(CustomConstraint constraintAnnotation) {}Overridepublic boolean isValid(String value, ConstraintValidatorContext context) {// 自定义校验逻辑return value ! null value.startsWith(A);}
}在DTO类中使用自定义注解
public class UserDTO {CustomConstraint(message 用户名必须以A开头)private String username;
}
4. Spring的RequestParam和PathVariable校验
对于简单的请求参数可以在方法参数中使用RequestParam和PathVariable结合Hibernate Validator注解进行校验。
GetMapping(/user/{id})
public ResponseEntityUserDTO getUser(PathVariable NotNull(message 用户ID不能为空) Long id) {// 获取用户逻辑
}