一文探知@Valid和@Validated 的区别(一)

使用spring boot开发的道友们,或许或多或少有用到过这两个注解,那么今天我们就来探查一下这两者的异同。

两者都可以使开发人员写的注解校验规则生效,例如在某一个字段上加上@NotNull、@NotBlank。

1)所属jar包:

@Valid 所在jar为validation-api,例如
validation-api-2.0.1.Final.jar;@Validated为spring-context,例如:spring-context-5.0.5.RELEASE.jar ;

2)在Controller类的方法的参数上写的检验规则

只能用@Validated并且得写在类名上,写在方法上、参数名前面都不生效,并且参数只能是java的原生类型及其对应的引用类,如Integer、String、int等,下面举例说明:新建一个Controller类 TestController.java

@Validated
@RestController
@RequestMapping(value = "/testBank")
public class TestController {

    @GetMapping(value = "/list")
    public void save(@NotBlank(message = "id不能传空") String id){
            System.out.println();
              return;
    }
}

3) 新建一个Dto类 BankDto.java:

@Data
public class BankDto {
@NotBlank(message = "bankCode不能为空")
private String bankCode;
}
//修改TestController.save方法的参数:
@GetMapping(value = "/list")
public void save(@RequestBody BankDto bankDto){
  System.out.println();
  return;
}

此时,继续在Controller类名上使用@Validated是不能bankCode的校验规则生效的;需要写在dto参数名前面,如果有多个参数,则需要每个都加上,此时使用@Valid或者@Validated都可以;示例如下:

public void save(@Valid @RequestBody BankDto bankDto)
public void save(@Validated @RequestBody BankDto bankDto)

4)新建一个 Dto类 SecondDto.java:

@Data
public class SecondDto {
  @NotBlank(message = "username不能为空")
  private String username;
}
//并在BankDto类中添加一个属性:
@Data
public class BankDto {
  @NotBlank(message = "bankCode不能为空")
  private String bankCode;
  private SecondDto secondDto;
}

注意,此时再按照 3)的写法,bankCode的校验固然生效,但是secondDto属性的对应的对象里的username校验将不会生效,如下图:

debug

postman

这里就涉及到校验规则的嵌套问题了,必须在对象属性上加@Valid,并且只能使用这个,只能写在属性的上方,只有@Valid可以在校验规则嵌套;修改BankDto类:@Validprivate SecondDto secondDto;继续上面的请求则会报错:

Resolved [
org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in public void com.bigone.network.controller.TestController.save(com.bigone.network.dto.BankDto): [Field error in object 'bankDto' on field 'secondDto.username': rejected value [null]; codes [NotBlank.bankDto.secondDto.username,NotBlank.secondDto.username,NotBlank.username,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [bankDto.secondDto.username,secondDto.username]; arguments []; default message [secondDto.username]]; default message [username不能为空]] ]

如果属性是对象集合也是一样,如@Validprivate List<SecondDto> secondDto;此时如果集合长度不为0,则会逐个检验SecondDto的校验规则;

如果还有更深一层的对象属性,继续在该属性上方加上@Valid注解。以上则是@Valid与@Validated在开发中常见的场景,至于其它涉及的规则分组的这里暂不讨论,往后研究过后再慢慢补上,望各位道友见谅!

PS:若觉得文章还不错,记得点赞评论转发哦!!!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容