校验,任何程序都需要的基础动作。
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 {
@Autowired
private 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 {
@NotNull
private 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
*/
@PostMapping
public Result add(@RequestBody @Validated(Category.Add.class) Category category) {
log.info("新增分类:{}", category);
categoryService.add(category);
return Result.success();
}
和
/**
* 更新文章分类
* @param category
* @return
*/
@PutMapping
public Result update(@RequestBody @Validated(Category.Update.class) Category category) {
log.info("分类详情 {}", category);
categoryService.update(category);
return Result.success();
}