springboot @validated List校验失效问题

 更新时间:2024年07月11日 09:08:32   作者:我有一只肥螳螂  
这篇文章主要介绍了springboot @validated List校验失效问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

springboot @validated List校验失效

添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

@validated 和 @valid 的区别

  • @Validated:提供了一个分组功能,可以在入参验证时,根据不同的分组采用不同的验证机制。没有添加分组属性时,默认验证没有分组的验证属性。
  • @Validated:用在类型、方法和方法参数上。但不能用于成员属性(field)
  • @Valid:可以用在方法、构造函数、方法参数和成员属性(field)上,所以可以用@Valid实现嵌套验证

问题

@Validated用在列表上是不生效的

@ApiOperation(value = "查询列表", notes = "查询列表")
@GetMapping(value = "/test/list")
String listTest( @RequestBody @Validated List<TestListReqDTO> list) {
    return "成功查询";
}
@Data
@ApiModel(value = "TestListReqDTO", description = "列表查询")
public class TestListReqDTO   {

    @ApiModelProperty("id")
    @NotNull(message = "id 不能为空")
    Long id;

    @ApiModelProperty("名称")
    @NotBlank(message = "名称 不能为空")
    String name;
}

解决方案

创建 ValidatedList

@Data
public class ValidatedList<E> implements List<E> , Serializable {
    @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);
    }
}

使用 ValidatedList

@ApiOperation(value = "查询列表", notes = "查询列表")
@GetMapping(value = "/test/list/valid")
String listTest(@RequestBody @Validated ValidatedList<TestListReqDTO> list) {
    return "成功查询";
}

总结

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

相关文章

  • JAVA验证码工具实例代码

    JAVA验证码工具实例代码

    这篇文章主要介绍了JAVA验证码工具实例代码,需要的朋友可以参考下
    2018-03-03
  • SpringBoot整合Mybatis-Plus实现关联查询

    SpringBoot整合Mybatis-Plus实现关联查询

    Mybatis-Plus(简称MP)是一个Mybatis的增强工具,只是在Mybatis的基础上做了增强却不做改变,MyBatis-Plus支持所有Mybatis原生的特性,本文给大家介绍了SpringBoot整合Mybatis-Plus实现关联查询,需要的朋友可以参考下
    2024-08-08
  • Java中使用Jedis操作Redis的实现代码

    Java中使用Jedis操作Redis的实现代码

    本篇文章主要介绍了Java中使用Jedis操作Redis的实现代码。详细的介绍了Redis的安装和在java中的操作,具有一定的参考价值,有兴趣的可以了解一下
    2017-05-05
  • 关于HttpServletRequest获取POST请求Body参数的3种方式

    关于HttpServletRequest获取POST请求Body参数的3种方式

    这篇文章主要介绍了关于HttpServletRequest获取POST请求Body参数的3种方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • java 在Jetty9中使用HttpSessionListener和Filter

    java 在Jetty9中使用HttpSessionListener和Filter

    这篇文章主要介绍了java 在Jetty9中使用HttpSessionListener和Filter的相关资料,需要的朋友可以参考下
    2017-06-06
  • SpringBoot2.3新特性优雅停机详解

    SpringBoot2.3新特性优雅停机详解

    这篇文章主要介绍了SpringBoot2.3新特性优雅停机详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • 详解Idea中HTTP Client请求测试工具的使用

    详解Idea中HTTP Client请求测试工具的使用

    今天抽空给大家分享Idea中HTTP Client请求测试工具的使用,小编在这建议使用HTTP Client的Idea版本最好在2018以上,不然的话体验不是多好,今天就给大家介绍Idea中HTTP Client怎么使用的,感兴趣的朋友跟随小编一起看看吧
    2021-05-05
  • Mybatis 如何批量删除数据的实现示例

    Mybatis 如何批量删除数据的实现示例

    这篇文章主要介绍了Mybatis 如何批量删除数据的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 详解Java数据库连接池

    详解Java数据库连接池

    今天继续Java的课题,两天没有做任何事情,过了个自在的周末,但是不知道为什么总是有点淡淡的忧桑.之前游戏服务器的数据源使用的是阿里巴巴的Druid,今天就大概说说数据源,给个实例,需要的朋友可以参考下
    2021-06-06
  • SpringBoot浅析安全管理之基于数据库认证

    SpringBoot浅析安全管理之基于数据库认证

    在真实的项目中,用户的基本信息以及角色等都存储在数据库中,因此需要从数据库中获取数据进行认证和授权
    2022-08-08

最新评论