@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 {

    @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();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值