Springboot @Validate @Valid 基于复杂嵌套对象的参数校验示例

Springboot @Validate @Valid 基于复杂嵌套对象的参数校验示例

复杂对象

复制代码
@Data
public class Object1 {
    @Length(max = 50,message = "长度不能超过50位字符")
    @NotBlank(message = "名称不能为空")
    private String name;
    @NotNull(message = "不能为空")
    private Integer grade;
    @NotNull(message = "计分展示不能为空")
    private Integer scoreDimension;
    @NotNull(message = "obj2s不能为空")
    @Valid
    private List<Object2> obj2s;
}


@Data
public class Object2{
    @Length(max = 50, message = "长度不能超过50位字符")
    @NotBlank(message = "分类名称不能为空")
    private String categoryName;
    @Valid
    private List<Object3> obj3s;
}

@Data
public class Object3{
    @NotNull(message = "分值不能为空")
    @Max(value =1000 , message = "分值最大不能超过1000")
    private Integer score;
    @Size(max = 500, message = "最多可输入500个字符")
    private String standards;

    @Size(max = 10, message = "标最多10条")
    private String[] urls;

    @NotNull(message = "不能为空")
    private Integer[] rating;
}

//controller校验

    @PostMapping("/check")
    public Result<Void> check( @Validated @RequestBody Object1 obj1) {
        return servei1.check(obj1);
    }

说明:

  • @Validated 和@Valid的区别:
    • @Validated : 用在类、方法和方法参数上,但不能用于成员属性。
    • @Valid:可以用在方法、构造函数、方法参数和成员属性上。
    • @Validated :支持分组验证,可以更细致地控制验证过程。此外,由于它是Spring专有的,因此可以更好地与Spring的其他功能(如Spring的依赖注入)集成。
    • @Valid:主要支持标准的Bean验证功能,不支持分组验证。
    • @Validated :不支持嵌套验证。
    • @Valid:支持嵌套验证,可以嵌套验证对象内部的属性。
  • @Size和@Length的区别:
    • 两者都是限制字符串长度的;@Size更为通用。
    • @Size注解更为通用,‌可以应用于字符串和集合字段,‌使用min和max参数指定长度范围。‌这意味着它可以用于多种数据类型,‌包括字符串、‌集合和数组,‌对于字符串可以校验长度,‌对于集合和数组可以校验大小
    • @Length注解仅适用于字符串字段,‌使用length参数指定具体长度。‌它专门用于校验字符串的长度;
相关推荐
乐之者v6 分钟前
Grafana监控可视化
java·grafana
DokiDoki之父16 分钟前
SpringMVC—请求映射路径 & get请求与Post请求发送请求参数 & 5种类型参数传递 & json数据传递参数 & 日期型参数的传递 & 响应
spring
weixin_4196583124 分钟前
Spring的三级缓存和SpringMVC的流程
java·spring·缓存
lang2015092831 分钟前
Spring Boot Actuator应用信息Application Information全解析
spring boot·后端·elasticsearch
paopaokaka_luck33 分钟前
基于SpringBoot+Vue的DIY手工社预约管理系统(Echarts图形化、腾讯地图API)
java·vue.js·人工智能·spring boot·后端·echarts
自在极意功。34 分钟前
贪心算法深度解析:从理论到实战的完整指南
java·算法·ios·贪心算法
计算机学姐5 小时前
基于微信小程序的高校班务管理系统【2026最新】
java·vue.js·spring boot·mysql·微信小程序·小程序·mybatis
一路向北⁢5 小时前
基于 Apache POI 5.2.5 构建高效 Excel 工具类:从零到生产级实践
java·apache·excel·apache poi·easy-excel·fast-excel
毕设源码-赖学姐7 小时前
【开题答辩全过程】以 基于Android的校园快递互助APP为例,包含答辩的问题和答案
java·eclipse
damo017 小时前
stripe 支付对接
java·stripe