SpringBoot用@Validation与@Valid校验数据

16 篇文章 0 订阅
12 篇文章 0 订阅

一、@Validated和@Valid的区别

@Valid属于标准JSR-303规范的标记型注解,@Validated则是Spring的注解,是对JSR-303补充
@Valid可以用在属性级别约束,用来表示级联校验。

  • 主要区别
 @Validated@Valid
分组提供分组功能,可在入参验证时,根据不同的分组采用不同的验证机制。无分组功能

可注解位置    

可以用在类型、方法和方法参数上。但是不能用在成员属性上可以用在方法、构造函数、方法参数和成员属性上(两者是否能用于成员属性上直接影响能否提供嵌套验证的功能)
嵌套验证

用在方法入参上无法单独提供嵌套验证功能。

不能用在成员属性上。

也无法提供框架进行嵌套验证。

能配合嵌套验证注解@Valid进行嵌套验证。

用在方法入参上无法单独提供嵌套验证功能。

能够用在成员属性上,提示验证框架进行嵌套验证。

能配合嵌套验证注解@Valid进行嵌套验证。

二、使用校验

  • @Validated打在类上是开启方法验证
@Validated
public class UserController {
	@Autowired
	UserService userService;
	@PostMapping("/list")
    public HttpResult listAll(@RequestBody User user) {
        return userService.insertUser());
    }
}
  • 实体参数上的验证注解标注
@Data
public class User{
	@NotBlank(message = "用户名不能为空")
	primary String username;
}
  • 统一异常处理
/**
     * 自定义验证异常
     */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public HttpResult validMethodException(MethodArgumentNotValidException e) {
        log.error(e.getMessage(), e);
        List<ObjectError> errors = e.getBindingResult().getAllErrors();
        StringBuilder message = new StringBuilder();
        errors.forEach(x -> message.append(x.getDefaultMessage()).append(";"));
        return HttpResult.error(message.toString());
    }

三、常用注解类型

@AssertFalse 校验false
@AssertTrue 校验true
@DecimalMax(value=,inclusive=) 小于等于value,inclusive=true,是小于等于
@DecimalMin(value=,inclusive=) 与上类似
@Max(value=) 小于等于value
@Min(value=) 大于等于value
@NotNull  检查Null
@Past  检查日期
@Pattern(regex=,flag=)  正则
@Size(min=, max=)  字符串,集合,map限制大小
@Validate 对po实体类进行校验

四、嵌套校验

  • 嵌套校验即:一个实体类中包含了另外一个实体类
public class Student{   
    private List<Teacher> teacherList;
 }
@RestController
public class StuController {

    @RequestMapping("/item/add")
    public void addItem(@Validated Student stu) {
        doSomething();
    }
}

无论是@Validated还是@Valid,单独都无法使直接校验到Teacher实体

  • 所以需要修改,在嵌套的实体上再加@Valid,在需要嵌套验证类的相应字段上,来配合方法参数上@Validated或@Valid来进行嵌套验证。
public class Student{   
	@Valid
    private List<Teacher> teacherList;
 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值