了解最新公司动态及行业资讯
<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.1.Final</version></dependency><dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.13.Final</version></dependency>
import javax.validation.constraints.Email;import javax.validation.constraints.NotNull;import javax.validation.constraints.Size;public class UserRegistrationDTO { @NotNull(message = "Username cannot be null") @Size(min = 3, max = 20, message = "Username must be between 3 and 20 characters") private String username; @NotNull(message = "Password cannot be null") @Size(min = 6, message = "Password must be at least 6 characters") private String password; @NotNull(message = "Email cannot be null") @Email(message = "Email should be valid") private String email; // Getters and Setters}
import org.springframework.validation.BindingResult;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class UserController { @PostMapping("/register") public String registerUser(@RequestBody @Valid UserRegistrationDTO user, BindingResult result) { if (result.hasErrors()) { return result.getAllErrors().stream() .map(ObjectError::getDefaultMessage) .collect(Collectors.joining(", ")); } // Proceed with registration logic return "User registered successfully"; }}
SR是 Java EE 的一种标准,用于基于注解的对象数据验证。在Spring Boot应用中,你可以通过添加注解直接在POJO类中声明验证规则。
这样可以确保在使用这些对象进行操作之前,它们满足业务规则。个人认为非常有用的,像我们中原六仔三合一平台出租系统重也是使用了SR,因为它减少了代码中的校验逻辑,使得校验逻辑更加集中且易于管理。
import javax.validation.Constraint;import javax.validation.Payload;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Constraint(validatedBy = PasswordValidator.class)@Target({ ElementType.FIELD, ElementType.METHOD })@Retention(RetentionPolicy.RUNTIME)public @interface ValidPassword { String message() default "Password must contain at least one number and one special character"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {};}
import javax.validation.ConstraintValidator;import javax.validation.ConstraintValidatorContext;import java.util.regex.Pattern;public class PasswordValidator implements ConstraintValidator<ValidPassword, String> { private static final String PASSWORD_PATTERN = "^(?=.*[0-9])(?=.*[!@#$%^&*]).{6,}$"; private final Pattern pattern = Pattern.compile(PASSWORD_PATTERN); @Override public void initialize(ValidPassword constraintAnnotation) { } @Override public boolean isValid(String password, ConstraintValidatorContext context) { if (password == null) { return false; } return pattern.matcher(password).matches(); }}
public class UserRegistrationDTO { @NotNull(message = "Username cannot be null") @Size(min = 3, max = 20, message = "Username must be between 3 and 20 characters") private String username; @NotNull(message = "Password cannot be null") @Size(min = 6, message = "Password must be at least 6 characters") @ValidPassword private String password; @NotNull(message = "Email cannot be null") @Email(message = "Email should be valid") private String email; // Getters and Setters}
import org.springframework.http.HttpStatus;import org.springframework.http.ResponseEntity;import org.springframework.validation.FieldError;import org.springframework.web.bind.MethodArgumentNotValidException;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.RestControllerAdvice;import java.util.HashMap;import java.util.Map;@RestControllerAdvicepublic class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseEntity<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException ex) { Map<String, String> errors = new HashMap<>(); ex.getBindingResult().getAllErrors().forEach(error -> { String fieldName = ((FieldError) error).getField(); String errorMessage = error.getDefaultMessage(); errors.put(fieldName, errorMessage); }); return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST); }}