Spring提供的一个参数校验框架,使用预定义的注解完成参数校验
1、引入依赖
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>3.2.5</version>
</dependency>
2、在参数前面添加@Pattern注解
@PostMapping("/register")
public Result register(@Pattern(regexp = "^\\S{5,16}$") String username, @Pattern(regexp = "^\\S{5,16}$")String password) {
// 查询用户
User u = userService.findByUserName(username);
if (u == null) {
// 注册
userService.register(username, password);
return Result.success();
}else {
return Result.error("用户名已存在!");
}
}
3、在Controller类上添加@Validated注解
参数校验失败异常处理
建包exception
建类GlobalExceptionHandler
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import walker.pojo.Result;
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public Result handleException(Exception e) {
e.printStackTrace();
return Result.error(StringUtils.hasLength(e.getMessage()) ? e.getMessage() : "操作失败");
}
}
Validation的注解
@JsonIgnore
import com.fasterxml.jackson.annotation.JsonIgnore;
让springmvc把对象转换成json字符串的时候,忽略该属性,最终json字符串中就没有这个属性了
@NotNull
值不能为null
@NotEmpty
值不能为null,并且内容不能为空
满足邮箱格式
package walker.pojo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
@NotNull
private Integer id;//主键ID
private String username;//用户名
@JsonIgnore // 让springmvc把对象转换成json字符串的时候,忽略password,最终json字符串中就没有password这个属性了
private String password;//密码
@NotEmpty
@Pattern(regexp = "^.{1,10}$")
// @Pattern(regexp = "^\\s{1,10}$")
private String nickname;//昵称
@NotEmpty
@Email
private String email;//邮箱
private String userPic;//用户头像地址
private LocalDateTime createTime;//创建时间
private LocalDateTime updateTime;//更新时间
}