<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
前言:
開發中我們會遇到多個介面公用一個請求物件的情況,如果需求變更,勢必會破壞已有程式碼的邏輯,不符合開閉原則,對引數校驗修修補補,不如一開始就劃分明確,所以在這裡記錄下分組校驗註解@Validated的使用。
測試過程:
新建一個SpringBoot
專案,新建module -> 引入依賴 -> 編寫主啟動類 -> 編寫組態檔 -> 新建各種包
Validated
有自己預設的組 Default.class
我們要建的組,就是不同業務使用欄位分成的組,舉例的業務是一個使用者物件,使用者有不同的角色,不同的介面會用到這個使用者物件的不同欄位。比如學生(Student)
,老師(Teacher):
Student
public interface Student { }
Teacher
public interface Teacher { }
我們的業務是多個介面共用一個請求物件,所以不同介面用到這個物件裡的欄位一定不同。所以在這裡對不同的欄位作了分組,比如:
Student
組;UserDTO
@Data public class UserDTO { @NotBlank(message = "id必傳") private String id; @NotBlank(message = "不能沒有名稱") private String name; @NotBlank(message = "老師不能沒有手機號", groups = Teacher.class) private String phone; @NotNull(message = "age必傳") private Integer age; @NotBlank(message = "不能沒有idCard") private String idCard; @NotEmpty(message = "學生不能沒有書") @Size(min = 2, message = "學生必須有兩本書", groups = Student.class) private List<String> bookNames; @NotEmpty @Size(min = 1, message = "老師不能沒有學生", groups = Teacher.class) private List<String> studentNames; }
對這個物件的不同業務劃分出5個介面,測試下欄位分組之後的必傳情況: 這樣看的清楚些
Controller
@RestController public class ValidatedController { /** * 測試 分組校驗 student * * @date 2022/2/11 15:47:14 */ @PostMapping("student") public UserDTO validatedStudent(@Validated(value = {Student.class, Default.class}) @RequestBody UserDTO userDTO) { return userDTO; } /** * 測試 分組校驗 teacher * * @date 2022/2/11 15:47:14 */ @PostMapping("teacher") public UserDTO validatedTeacher(@Validated(value = {Teacher.class, Default.class}) @RequestBody UserDTO userDTO) { return userDTO; } /** * 測試 分組校驗 default * * @date 2022/2/11 15:47:14 */ @PostMapping("default") public UserDTO validatedDefault(@Validated(value = {Default.class}) @RequestBody UserDTO userDTO) { return userDTO; } /** * 測試 分組校驗 onlyStudent * * @date 2022/2/11 15:47:14 */ @PostMapping("onlyStudent") public UserDTO validatedOnlyStudent(@Validated(value = {Student.class}) @RequestBody UserDTO userDTO) { return userDTO; } /** * 測試 分組校驗 onlyTeacher * * @date 2022/2/11 15:47:14 */ @PostMapping("onlyTeacher") public UserDTO validatedOnlyTeacher(@Validated(value = {Teacher.class}) @RequestBody UserDTO userDTO) { return userDTO; } }
對 Student
、Teacher
、Default
、OnlyStudent
、OnlyTeacher
進行測試
不需要列舉所有情況,這裡就用Student
介面做測試。這個介面如果不傳遞Student組的bookNames欄位或者bookNames欄位長度不足 2 就會丟擲異常,但是因為分組的緣故,即使不傳遞Teacher Group
的欄位也不會受到影響。
不傳bookNames
只傳遞一個bookNames
其它介面例子我就不多說了,因為沒有顯式分組的預設都是Default組,所以,測試介面裡面有Default組的測試,就是預設沒有分組的屬性都歸Default管理;
測試用例中的only這兩個組,就是在沒有Default的情況下,只對Student和Teacher 組的欄位進行校驗;
要注意平常我們寫@Validated
註解的時候,預設就是@Validated(group = {Default.class}),
也就是預設所有欄位都是Default
組的,顯式分組之後,剩下的那些沒有被劃分到自建組的欄位都是Default組;
因為這種機制的出現所以我們可以很靈活的使用物件裡面的某些欄位,比如可以新建一個Master組,可以將Student和Teacher組的欄位都劃分到Master組,以實現類似於高許可權等級的引數傳遞校驗等等操作!
到此這篇關於Java Validated 分組校驗的使用的文章就介紹到這了,更多相關Java Validated 分組校驗內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45