当前位置:   article > 正文

Spring参数校验--List<E>类型参数校验_请求参数 list类型 valid

请求参数 list类型 valid

1.遇到的问题:

今天开发接口,遇到请求参数固定为List<CommonConfigBean>类型的,如下。发现参数校验失效。

  1. @RequestMapping(method = RequestMethod.POST)
  2. public void insertCommonConfig(@RequestBody @Validated List<CommonConfigBean> list){
  3. int result=commonConfigService.insertCommonConfig(list);
  4. //更新缓存池
  5. if(result>0) {
  6. updateCache(list);
  7. log.info("refresh the configCache");
  8. }
  9. }
  1. @Getter
  2. @Setter
  3. @ToString
  4. public class CommonConfigBean {
  5. /**主键id*/
  6. private Integer id;
  7. /**参数名称*/
  8. @Length(max = 30)
  9. @NotEmpty
  10. private String itemName;
  11. /**参数值*/
  12. @Length(max = 1000)
  13. @NotEmpty
  14. private String itemValue;
  15. /**备注*/
  16. @Length(max = 50)
  17. private String memo;
  18. }

2.解决方案一:

新建一个类,把List<SaveVideoReq>作为成员变量, 然后用@Valid注解在List上。

  1. public class CommonConfigBeanWrapper{
  2. @Valid
  3. private List<CommonConfigBean> req;
  4. }

3. 解决方案二:
但是,由于某种原因,前端只会传[{“name”:“name”,“sex”:“sex”,“type":"视频"},{...}]。因此,请求对象是固定的,不能用方案一处理。此时,可以参考网上的一个方法,创建一个类,实现List接口,并添加List<E> list = new ArrayList<>();或者LinkedList作为成员变量,如下:
 

  1. package com.dahuatech.peopasg.infrastructure.bean;
  2. import lombok.Data;
  3. import javax.validation.Valid;
  4. import java.util.*;
  5. @Data
  6. public class ValidList<E> implements List<E> {
  7. @Valid
  8. private List<E> list = new LinkedList<>();
  9. @Override
  10. public int size() {
  11. return list.size();
  12. }
  13. @Override
  14. public boolean isEmpty() {
  15. return list.isEmpty();
  16. }
  17. @Override
  18. public boolean contains(Object o) {
  19. return list.contains(o);
  20. }
  21. @Override
  22. public Iterator<E> iterator() {
  23. return list.iterator();
  24. }
  25. @Override
  26. public Object[] toArray() {
  27. return list.toArray();
  28. }
  29. @Override
  30. public <T> T[] toArray(T[] a) {
  31. return list.toArray(a);
  32. }
  33. @Override
  34. public boolean add(E e) {
  35. return list.add(e);
  36. }
  37. @Override
  38. public boolean remove(Object o) {
  39. return list.remove(o);
  40. }
  41. @Override
  42. public boolean containsAll(Collection<?> c) {
  43. return list.containsAll(c);
  44. }
  45. @Override
  46. public boolean addAll(Collection<? extends E> c) {
  47. return list.addAll(c);
  48. }
  49. @Override
  50. public boolean addAll(int index, Collection<? extends E> c) {
  51. return list.addAll(index, c);
  52. }
  53. @Override
  54. public boolean removeAll(Collection<?> c) {
  55. return list.removeAll(c);
  56. }
  57. @Override
  58. public boolean retainAll(Collection<?> c) {
  59. return list.retainAll(c);
  60. }
  61. @Override
  62. public void clear() {
  63. list.clear();
  64. }
  65. @Override
  66. public E get(int index) {
  67. return list.get(index);
  68. }
  69. @Override
  70. public E set(int index, E element) {
  71. return list.set(index, element);
  72. }
  73. @Override
  74. public void add(int index, E element) {
  75. list.add(index, element);
  76. }
  77. @Override
  78. public E remove(int index) {
  79. return list.remove(index);
  80. }
  81. @Override
  82. public int indexOf(Object o) {
  83. return list.indexOf(o);
  84. }
  85. @Override
  86. public int lastIndexOf(Object o) {
  87. return list.lastIndexOf(o);
  88. }
  89. @Override
  90. public ListIterator<E> listIterator() {
  91. return list.listIterator();
  92. }
  93. @Override
  94. public ListIterator<E> listIterator(int index) {
  95. return list.listIterator(index);
  96. }
  97. @Override
  98. public List<E> subList(int fromIndex, int toIndex) {
  99. return list.subList(fromIndex, toIndex);
  100. }
  101. }

然后,控制器的参数列表就变成了如下。此时,就可以正常从bingdingResult获取校验结果了。

  1. @RequestMapping(method = RequestMethod.POST)
  2. public void insertCommonConfig(@RequestBody @Validated ValidList<CommonConfigBean> list){
  3. int result=commonConfigService.insertCommonConfig(list);
  4. //更新缓存池
  5. if(result>0) {
  6. updateCache(list);
  7. log.info("refresh the configCache");
  8. }
  9. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/77072
推荐阅读
相关标签
  

闽ICP备14008679号