在Spring Boot项目中,可以使用@Valid
和@Validated
注解配合Java Bean Validation API(如Hibernate Validator)来进行参数校验。以下是一个简单的示例,展示如何在控制器中使用这些注解进行参数校验。
确保在pom.xml
中添加了相关的依赖(如果使用Maven):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
创建一个用于接收请求参数的DTO(数据传输对象)类,并使用JSR-303注解进行字段校验:
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
public class UserDto {
@NotBlank(message = "用户名不能为空")
private String username;
@Email(message = "邮箱格式不正确")
private String email;
@Size(min = 6, message = "密码至少需要6个字符")
private String password;
// getters and setters
}
在你的控制器中,使用@Valid
注解来标识需要校验的参数,并通过@RequestBody
接收JSON格式的请求体:
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@RestController
@RequestMapping("/users")
@Validated
public class UserController {
@PostMapping
public ResponseEntity<String> createUser(@Valid @RequestBody UserDto userDto) {
// 处理用户创建逻辑
return ResponseEntity.ok("用户创建成功");
}
}
可以定义一个全局异常处理器,来处理校验失败的情况:
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import java.util.HashMap;
import java.util.Map;
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException ex) {
Map<String, String> errors = new HashMap<>();
ex.getBindingResult().getFieldErrors().forEach(error ->
errors.put(error.getField(), error.getDefaultMessage())
);
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errors);
}
}
以上步骤展示了如何在Spring Boot项目中使用@Valid
注解进行参数校验。你可以根据具体的需求添加更多的校验规则,确保输入数据的有效性。
Java Bean Validation API 提供了一系列注解,用于对对象属性进行参数校验。以下是一些常用的校验注解及其作用:
@NotNull
null
。 @NotNull(message = "姓名不能为空")
private String name;
@NotBlank
null
且不能为空字符串(去掉空格后)。 @NotBlank(message = "用户名不能为空")
private String username;
@NotEmpty
@NotEmpty(message = "邮箱列表不能为空")
private List<String> emails;
@Size
@Size(min = 6, max = 20, message = "密码长度必须在6到20之间")
private String password;
@Min
和 @Max
@Min(value = 18, message = "年龄必须大于等于18")
@Max(value = 99, message = "年龄必须小于等于99")
private int age;
@Email
@Email(message = "邮箱格式不正确")
private String email;
@Pattern
@Pattern(regexp = "^[A-Za-z0-9]+$", message = "用户名只能包含字母和数字")
private String username;
@Future
和 @Past
@Future(message = "截止日期必须在未来")
private LocalDate deadline;
@Past(message = "出生日期必须在过去")
private LocalDate birthDate;
@Valid
@Valid
private Address address;
@AssertTrue
和 @AssertFalse
true
或false
。 @AssertTrue(message = "必须接受条款和条件")
private boolean acceptedTerms;
这些注解可以组合使用,以实现更复杂的校验逻辑。在实际项目中,根据业务需求选择合适的校验注解,确保数据的有效性和安全性。