面试题答案
一键面试1. 引入依赖
在pom.xml
中,Spring Boot 通常已经自动引入了spring-boot-starter-validation
依赖,如果没有,可以手动添加:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2. 使用注解进行验证
- @NotEmpty:验证字符串不为空且长度大于0,用于验证用户名等不能为空白的字段。
- @Size:验证字符串长度在指定范围内,可用于用户名和密码的长度验证。
- @Pattern:验证字符串是否匹配指定的正则表达式,可用于密码格式等验证。
3. 代码示例
实体类
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
public class UserRegistration {
@NotEmpty(message = "用户名不能为空")
@Size(min = 3, max = 20, message = "用户名长度必须在3到20个字符之间")
private String username;
@NotEmpty(message = "密码不能为空")
@Size(min = 6, max = 20, message = "密码长度必须在6到20个字符之间")
@Pattern(regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[a-zA-Z\\d]{6,20}$",
message = "密码必须包含至少一个小写字母、一个大写字母和一个数字")
private String password;
// 省略getter和setter方法
}
控制器
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
@RestController
@Validated
public class UserRegistrationController {
@PostMapping("/register")
public ResponseEntity<String> registerUser(@Valid @RequestBody UserRegistration userRegistration) {
// 逻辑处理,例如保存用户到数据库
return new ResponseEntity<>("注册成功", HttpStatus.OK);
}
}
在上述代码中:
- 在
UserRegistration
实体类中,通过@NotEmpty
、@Size
和@Pattern
等注解对username
和password
字段进行了有效性验证。 - 在
UserRegistrationController
的registerUser
方法中,使用@Valid
注解标记UserRegistration
参数,这样在请求到达时,Spring 会自动对请求体中的数据进行验证。如果验证失败,会抛出MethodArgumentNotValidException
异常,Spring 会自动返回包含错误信息的响应。可以通过自定义全局异常处理器来处理该异常,返回更友好的错误信息。