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 "成功查询";
}

总结

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

相关文章

  • MyBatis实现乐观锁和悲观锁的示例代码

    MyBatis实现乐观锁和悲观锁的示例代码

    在数据库操作中,乐观锁和悲观锁是两种常见的并发控制策略,本文主要介绍了MyBatis实现乐观锁和悲观锁的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • Java中Elasticsearch 实现分页方式(三种方式)

    Java中Elasticsearch 实现分页方式(三种方式)

    Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎,这篇文章主要介绍了Elasticsearch实现分页的3种方式,需要的朋友可以参考下
    2022-07-07
  • springboot项目配置context path失效的问题解决

    springboot项目配置context path失效的问题解决

    本文主要介绍了springboot项目配置context path失效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • java序列化的种类和使用场景详解

    java序列化的种类和使用场景详解

    本文详细介绍了序列化的概念、Java内置序列化、自定义序列化、第三方序列化框架(如Kryo、Protobuf)以及在分布式系统和RPC框架中的应用,通过比较不同序列化方式的优缺点,指导开发者选择合适的序列化方案,以确保系统的性能、安全性和可维护性
    2025-01-01
  • Java实现替换集合中的元素的方法详解

    Java实现替换集合中的元素的方法详解

    这篇文章主要为大家详细介绍了Java中实现替换集合中的元素的常见方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • 使用工具类-java精确到小数点后6位

    使用工具类-java精确到小数点后6位

    这篇文章主要介绍了使用工具类-java精确到小数点后6位,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Java流程控制之顺序结构

    Java流程控制之顺序结构

    Java中的流程控制语句可以这样分类:顺序结构,选择结构,循环结构。下面文章我们就来看看来顺序结构的详细介绍,主要以顺序结构简单图示及详细解说该内容,需要的小伙伴可以参考一下
    2021-12-12
  • Spring Boot异步输出Logback日志方法详解

    Spring Boot异步输出Logback日志方法详解

    这篇文章主要给大家介绍了关于Spring Boot异步输出Logback日志的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • Java构建高效结果缓存方法示例

    Java构建高效结果缓存方法示例

    这篇文章主要介绍了Java构建高效结果缓存方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Spring Task定时任务开发实战教程

    Spring Task定时任务开发实战教程

    文章介绍了SpringTask,这是Spring框架提供的用于实现定时任务的模块,它基于注解和配置方式,简化了任务调度的实现,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2026-03-03

最新评论