使用@Validated和@Valid 解決list校驗(yàn)的問(wèn)題
@Validated和@Valid 解決list校驗(yàn)
在 Controller 類上 加上@Validated。在需要校驗(yàn)的參數(shù)上加上 @Valid 。
就可以校驗(yàn)list里的實(shí)體類的屬性
@validated驗(yàn)證List參數(shù)
寫了個(gè)接口
@GetMapping("/do") public int doSth(@RequestBody @Validated(MyGroup.class) List<Bean> myBean)
發(fā)現(xiàn)@validated完全沒(méi)用,但是用@valid可以,但是我要用分組功能必須用@validated,在stackOverflow上找到了解決方案:
在項(xiàng)目里添加一個(gè)ValidList類即可,此類通用,可以在全部由此需求的項(xiàng)目(jdk1.8)中添加,無(wú)需改動(dòng),有ValidList類之后只要將接口方法參數(shù)中的List改成ValidList即可:
@GetMapping("/do") public int doSth(@RequestBody @Validated(MyGroup.class) ValidList<Bean> myBean)
注意:
如果你不用lombok,就把@Data注解去掉,給類中的list成員加上getter,setter方法即可
ValidList
import lombok.Data; import javax.validation.Valid; import java.util.*; @Data public class ValidList<E> implements List<E> { @Valid private List<E> list = new LinkedList<>(); @Override public int size() { return list.size(); } @Override public boolean isEmpty() { return list.isEmpty(); } @Override public boolean contains(Object o) { return list.contains(o); } @Override public Iterator<E> iterator() { return list.iterator(); } @Override public Object[] toArray() { return list.toArray(); } @Override public <T> T[] toArray(T[] a) { return list.toArray(a); } @Override public boolean add(E e) { return list.add(e); } @Override public boolean remove(Object o) { return list.remove(o); } @Override public boolean containsAll(Collection<?> c) { return list.containsAll(c); } @Override public boolean addAll(Collection<? extends E> c) { return list.addAll(c); } @Override public boolean addAll(int index, Collection<? extends E> c) { return list.addAll(index, c); } @Override public boolean removeAll(Collection<?> c) { return list.removeAll(c); } @Override public boolean retainAll(Collection<?> c) { return list.retainAll(c); } @Override public void clear() { list.clear(); } @Override public E get(int index) { return list.get(index); } @Override public E set(int index, E element) { return list.set(index, element); } @Override public void add(int index, E element) { list.add(index, element); } @Override public E remove(int index) { return list.remove(index); } @Override public int indexOf(Object o) { return list.indexOf(o); } @Override public int lastIndexOf(Object o) { return list.lastIndexOf(o); } @Override public ListIterator<E> listIterator() { return list.listIterator(); } @Override public ListIterator<E> listIterator(int index) { return list.listIterator(index); } @Override public List<E> subList(int fromIndex, int toIndex) { return list.subList(fromIndex, toIndex); } }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Java中的三種校驗(yàn)注解的使用(@Valid,@Validated和@PathVariable)
- spring @Validated 注解開(kāi)發(fā)中使用group分組校驗(yàn)的實(shí)現(xiàn)
- Java參數(shù)校驗(yàn)@Validated、@Valid介紹及使用詳解
- SpringBoot參數(shù)校驗(yàn)之@Validated的使用詳解
- @Valid和@Validated注解校驗(yàn)以及異常處理方式
- 使用@Validated注解進(jìn)行校驗(yàn)卻沒(méi)有效果的解決
- Spring 中@Validated 分組校驗(yàn)的使用解析
- Spring利用@Validated注解實(shí)現(xiàn)參數(shù)校驗(yàn)詳解
- JAVA校驗(yàn)之@Valid和@Validated實(shí)踐指南
相關(guān)文章
java實(shí)現(xiàn)哈弗曼編碼與反編碼實(shí)例分享(哈弗曼算法)
本文介紹java實(shí)現(xiàn)哈弗曼編碼與反編碼實(shí)例,大家參考使用吧2014-01-01Spring?MVC啟動(dòng)之HandlerMapping作用及實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了Spring?MVC啟動(dòng)之HandlerMapping作用及實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Java中的NumberFormatException異常原因以及解決方案詳解
這篇文章主要介紹了Java中的NumberFormatException異常原因以及解決方案詳解,NumberFormatException 是 Java 中的一個(gè)異常類,通常在字符串轉(zhuǎn)換為數(shù)字的過(guò)程中發(fā)生,它表示一個(gè)無(wú)效的數(shù)字格式,即字符串無(wú)法被正確解析為數(shù)字,需要的朋友可以參考下2024-02-02mybatis插入數(shù)據(jù)不返回主鍵id的可能原因及解決方式
這篇文章主要介紹了mybatis插入數(shù)據(jù)不返回主鍵id的可能原因及解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08Java修飾符abstract與static及final的精華總結(jié)
abstract、static、final三個(gè)修飾符是經(jīng)常會(huì)使用的,對(duì)他們的概念必須非常清楚,弄混了會(huì)產(chǎn)生些完全可以避免的錯(cuò)誤,比如final和abstract不能一同出現(xiàn),static和abstract不能一同出現(xiàn),下面我們來(lái)詳細(xì)了解2022-04-04基于ZooKeeper實(shí)現(xiàn)隊(duì)列源碼
這篇文章主要介紹了基于ZooKeeper實(shí)現(xiàn)隊(duì)列源碼的相關(guān)內(nèi)容,包括其實(shí)現(xiàn)原理和應(yīng)用場(chǎng)景,以及對(duì)隊(duì)列的簡(jiǎn)單介紹,具有一定參考價(jià)值,需要的朋友可以了解下。2017-09-09使用jdk1.8實(shí)現(xiàn)將list根據(jù)指定的值去分組的操作
這篇文章主要介紹了使用jdk1.8實(shí)現(xiàn)將list根據(jù)指定的值去分組的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10Java線程池中的各個(gè)參數(shù)如何合理設(shè)置
這篇文章主要介紹了Java線程池中的各個(gè)參數(shù)如何合理設(shè)置操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06盤點(diǎn)SpringBoot中@Async注解的遇到的坑點(diǎn)及解決辦法
SpringBoot是一個(gè)流行的Java開(kāi)發(fā)框架,在異步編程方面,Spring Boot提供了@Async注解,它能夠讓方法異步執(zhí)行,然而,在使用@Async注解時(shí),有一些潛在的坑需要注意,本文將深入探討Spring Boot中使用@Async注解時(shí)可能遇到的8大坑點(diǎn),并提供相應(yīng)的解決方案2024-03-03Java定時(shí)/延時(shí)任務(wù)之Timer用法詳解
在?Java?Development?Kit?(JDK)?中,java.util.Timer?是一個(gè)用于調(diào)度任務(wù)的工具類,本文主要來(lái)和大家聊聊Timer的用法,有需要的小伙伴可以了解下2024-12-12