国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術文章
文章詳情頁

Java Validation方法入參校驗實現過程解析

瀏覽:7日期:2022-08-21 08:33:38

一.前言

在日常的開發中,經常需要對方法參數進行校驗(非空、長度等)。如果采用hardcode去校驗(if..else..),會造成代碼冗余,復用性低,導致維護成本比較高。借助Validation組件,可以很方便地通過注解來校驗參數。

二.Java Validation組件

JSR

JSR 是一種規范標準,規定了一些校驗規范的注解,位于javax.validation.constraints包下,只提供規范不提供實現,如@NotNull,@Size 等

Hibernate Validation

hibernate Validation 與 hibernate ORM框架沒有半毛錢關系,它提供了JSR的實現,位于org.hibernate.validator.constraints包下。

三.用法

引入依賴:

<dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId></dependency>

手動添加bean :

對實體類添加注解:

@DatapublicclassPeople {@NotNull(message = '姓名不能為空')privateStringname;@Min(value = 1, message = '年齡不能小于1歲')privateInteger size;}

Controller層上用法:

如果在Spring的Controller層引用以上Java Bean對象,則需要加上@Valid注解,用法如下:

@RestController@RequestMapping('/api')publicclassPeopleController {@AutowiredprivatePeopleService peopleService;@RequestMapping('/addPeople')publicStringaddPeople(@Valid@RequestBodyPeople people) {peopleService.addPeople(people);return'ok';}}

Service層上用法:

@Valid注解,當我們用Service接口層的時候,會發現參數校驗邏輯是不生效的。要向讓@Valid注解在controller層以外的地方生效,必須配合@Validated來使用。這是因為Spring給我們創建了一個用于參數校驗的AOP切面邏輯,過濾方式就是class被@Validated修飾的bean對象。所以我們可以使用@Validated來修飾我們的service層實現類:

@Validated public interface PeopleService { voidaddPeople(@ValidPeople people);}

Controller層不需要@Validated注解是因為在Spring的controller層有數據綁定和校驗的過程,默認就會對@Valid修飾的方法參數使用Validator來做校驗邏輯。

四.原理

1.利用Spring ioc,注入MethodValidationPostProcessor和LocalValidatorFactoryBean。

2.利用Spring ioc提供的擴展點(BeanPostProcessor, InitializingBean),初始化攔截器MethodValidationInterceptor

3.MethodValidationPostProcessor用來生成和植入攔截器MethodValidationInterceptor,調用方法時自動攔截。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 南丹县| 淮阳县| 米脂县| 资中县| 理塘县| 全椒县| 灌云县| 兰西县| 九龙坡区| 枣庄市| 都安| 高安市| 平罗县| 社会| 赣州市| 博爱县| 项城市| 湛江市| 蒙城县| 江孜县| 仪陇县| 太仆寺旗| 磴口县| 嘉荫县| 朝阳县| 安吉县| 榆社县| 和硕县| 铜鼓县| 福清市| 深圳市| 太仆寺旗| 临高县| 博客| 体育| 宜君县| 锦州市| 普兰店市| 浦江县| 东宁县| 宣汉县|