好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

使用@Validated和@Valid 解决list校验的问题

@ Validated 和@Valid 解决list校验

在 Controller 类上 加上@Validated。在需要校验的参数上加上 @Valid 。

就可以校验list里的实体类的属性

@validated验证List参数

写了个接口

?

1

2

@GetMapping ( "/do" )

public int doSth( @RequestBody @Validated (MyGroup. class ) List<Bean> myBean)

发现@validated完全没用,但是用@valid可以,但是我要用分组功能必须用@validated,在stackOverflow上找到了解决方案:

在项目里添加一个ValidList类即可,此类通用,可以在全部由此需求的项目(jdk1.8)中添加,无需改动,有ValidList类之后只要将接口方法参数中的List改成ValidList即可:

?

1

2

@GetMapping ( "/do" )

public int doSth( @RequestBody @Validated (MyGroup. class ) ValidList<Bean> myBean)

注意:

如果你不用lombok,就把@Data注解去掉,给类中的list成员加上getter,setter方法即可

ValidList

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

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);

   }

}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

原文链接:https://blog.csdn.net/u014003446/article/details/100022680

查看更多关于使用@Validated和@Valid 解决list校验的问题的详细内容...

  阅读:26次