在Spring Boot中使用Validation进行表单验证
    		       		warning:
    		            这篇文章距离上次修改已过425天,其中的内容可能已经有所变动。
    		        
        		                
                在Spring Boot中使用Validation进行表单验证,你可以利用Hibernate Validator,它是Bean Validation的一个实现。以下是一个简单的例子:
- 添加依赖到你的
pom.xml: 
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>- 创建一个实体类并添加验证注解:
 
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
 
public class UserForm {
 
    @NotBlank(message = "用户名不能为空")
    @Size(min = 3, max = 20, message = "用户名长度必须在3到20个字符之间")
    private String username;
 
    @NotBlank(message = "密码不能为空")
    @Size(min = 6, max = 20, message = "密码长度必须在6到20个字符之间")
    private String password;
 
    // 省略getter和setter方法
}- 在Controller中使用
@Valid注解进行验证: 
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;
 
@RestController
public class UserController {
 
    @PostMapping("/register")
    public String registerUser(@Validated @RequestBody UserForm userForm) {
        // 验证通过后的逻辑
        return "注册成功";
    }
}- 处理验证错误:
 
如果表单验证失败,你可以通过BindingResult来获取错误信息:
@PostMapping("/register")
public String registerUser(@Validated @RequestBody UserForm userForm, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        // 处理错误信息
        bindingResult.getAllErrors().forEach(error -> System.out.println(error.getDefaultMessage()));
        return "注册失败";
    }
    return "注册成功";
}或者,你可以使用@ControllerAdvice和@ExceptionHandler来全局处理验证错误:
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
 
@ControllerAdvice
public class GlobalExceptionHandler {
 
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ExceptionHandler(MethodArgumentNotValidException.c           
评论已关闭