@Validation 的使用 Spring
校验,任何程序都需要的基础动作。
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.groups.Default;
Validation 注解提供了 Spring Boot 丰富的校验使用。
参数校验
@RestController
@RequestMapping("/user")
@Validated
@Slf4j
public class UserController {@Autowiredprivate UserService userService;/*** 注册用户* @param username* @param password* @return*/@PostMapping("/register")public Result register(@Pattern(regexp = "^\\S{5,16}$") String username,@Pattern(regexp = "^\\S{5,16}$") String password) {// 确定用户是否存在User user = userService.findByUsername(username);if (user != null) {return Result.error(ErrorMessage.REGISTER_ERROR);}else {String md5PW = Md5Util.getMD5String(password); // 对 password 进行 md5 加密userService.register(username,md5PW);return Result.success();}}
实体类校验
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Category {@NotNullprivate Integer id;//主键ID@NotEmpty@Pattern(regexp = "^\\S{3,10}$")private String categoryName;//分类名称@NotEmpty@Pattern(regexp = "^\\S{3,10}$")private String categoryAlias;//分类别名private Integer createUser;//创建人ID@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime createTime;//创建时间@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime updateTime;//更新时间
}
分组校验
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Category {@NotNull(groups = Update.class)private Integer id;//主键ID@NotEmpty@Pattern(regexp = "^\\S{3,10}$")private String categoryName;//分类名称
// @NotEmpty(groups = {Add.class,Update.class})@NotEmpty@Pattern(regexp = "^\\S{3,10}$")private String categoryAlias;//分类别名private Integer createUser;//创建人ID@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime createTime;//创建时间@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime updateTime;//更新时间// 定义 groups 分组public interface Add extends Default {}public interface Update extends Default {}
}
说明:
1. 如果不设置分组校验,则默认为 Default 分组
2. 分组校验,有继承能力,即 A extends B
所以代码
// @NotEmpty(groups = {Add.class,Update.class})
@NotEmpty
实体类校验,需要方法上
/*** 新增分类* @param category* @return*/@PostMappingpublic Result add(@RequestBody @Validated(Category.Add.class) Category category) {log.info("新增分类:{}", category);categoryService.add(category);return Result.success();}
和
/*** 更新文章分类* @param category* @return*/@PutMappingpublic Result update(@RequestBody @Validated(Category.Update.class) Category category) {log.info("分类详情 {}", category);categoryService.update(category);return Result.success();}