Spring参数校验--List<E>类型参数校验

2023-11-11

1.遇到的问题:

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

    @RequestMapping(method = RequestMethod.POST)
    public void insertCommonConfig(@RequestBody @Validated List<CommonConfigBean> list){
        int result=commonConfigService.insertCommonConfig(list);
        //更新缓存池
        if(result>0) {
            updateCache(list);
            log.info("refresh the configCache");
        }
    }
@Getter
@Setter
@ToString
public class CommonConfigBean {
    /**主键id*/
    private Integer id;
    /**参数名称*/
    @Length(max = 30)
    @NotEmpty
    private String itemName;
    /**参数值*/
    @Length(max = 1000)
    @NotEmpty
    private String itemValue;
    /**备注*/
    @Length(max = 50)
    private String memo;
}

2.解决方案一:

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

public class CommonConfigBeanWrapper{
 
    @Valid
    private List<CommonConfigBean> req;
 
}

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

package com.dahuatech.peopasg.infrastructure.bean;

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring参数校验--List<E>类型参数校验 的相关文章

  • Spring安全+LocaleResolver

    我需要在身份验证成功后更改区域设置 区域设置解析器
  • 如何在JavaFX中有效地滚动和缩放大图像?

    作为图像处理应用程序的一部分 我需要创建具有缩放 滚动和矢量叠加功能的简单查看器模块 图像相当大 40000x20000 这使得 ImageView 上的操作变慢 缓冲等 在 JavaFX 中处理巨大图像时 改善用户体验的最佳选项是什么 我
  • 解析 (yyyy-MM-dd) 格式的字符串日期

    我有一个 2013 09 18 形式的字符串 我想将其转换为 java util Date 我正在做这个 SimpleDateFormat sdf new SimpleDateFormat yyyy MM dd Date converted
  • Glassfish 4 - JDBC 领域

    Glassfish 4 中的密码加密算法和摘要算法有什么区别 因为Password加密算法不能为空 所以我使用了MD5 Encoding使用了Hex 摘要算法为空 因此默认为 SHA 256 但是 如果我使用 JAAS 制作一个简单的登录应
  • 在 json 中解析尾随字符

    我正在尝试检查 json 是否有效 并且我遇到了奇怪的行为 当我将一些字符附加到可解析的 json 时 jackson 和 gson 都会解析它 并且它们会忽略尾随字符 我想检查 json 是否严格有效 请帮忙 我尝试了几个标志mapper
  • 有没有办法让Maven自动下载快照版本?

    所以我有一个项目依赖于另一个项目的快照版本 依赖关系是
  • Android:TelephonyManager 类

    我不明白为什么 API 文档中这么写TelephonyManager类是public 但是当我尝试创建一个实例时 它说它不是公共类 并且无法从包中访问 我看到它也说使用Context getSystemService Context TEL
  • 为什么当达到 InitiatingHeapOccupancyPercent 时 G1 不开始标记周期?

    根据文档 http www oracle com technetwork articles java g1gc 1984535 html XX InitiatingHeapOccupancyPercent 设置触发标记周期的Java堆占用阈
  • Java 客户端到服务器未知来源

    我有一个简单的乒乓球游戏 需要通过网络工作 服务器将创建一个带有球和 2 个球棒位置的游戏 当客户端连接到服务器时 服务器将创建一个名为 PongPlayerThread 的新类 它将处理客户端到服务器的输入和输出流 我的服务器工作100
  • 合并和颜色样式不适用于 Apache POI excel 2003 格式

    在 Apache POI 中 我为某些单元格应用了一些样式并合并了这些单元格 当我在 2010 年或 2007 年打开时 它工作正常 但在 2003 年 格式样式消失了 每次保存 2003 Excel 文件之前都会弹出兼容性检查对话框 请参
  • 如何在java中从包含.0的浮点数中删除小数部分

    我只想删除包含的浮点数的小数部分 0 所有其他数字都是可以接受的 例如 I P 1 0 2 2 88 0 3 56666 4 1 45 00 99 560 O P 1 2 2 88 3 567 4 1 45 99 560 有什么方法可以做到
  • 在 java 8 下使用泛型出现类型错误,但在 java 7 下则不然

    我有一段代码可以在 java 7 下编译良好 但不能在 java 8 下编译 这是一个独立的重现示例 我已经采用了显示此问题的真实代码并删除了所有实现 import java util Iterator class ASTNode
  • 自 JRE 1.7.0_25 起,Batik 无法进行转换

    自从我更新到 JAVA 1 7 0 25 以来 蜡染在应用转换时会抛出异常 堆栈跟踪是 java awt image ImagingOpException Unable to transform src image at java awt
  • Java 声音可视化器

    我正在尝试制作一个java声音可视化工具 但我完全不知道如何在实时处理音频后立即从提取的音频中获取字节 我可以将程序与 wav 文件同步 但这不是我想要做的 我想用程序生成声音 然后播放它 而不将其保存在任何地方 谢谢您的帮助 本文可以帮助
  • “强制更新快照/版本” - 这是什么意思

    在 Maven 项目中 选择 更新项目 时 有一个名为 强制更新快照 版本 的选项 它有什么作用 强制更新快照 版本 就像运行以下命令 mvn U install U 也可以用作 update snapshot 看here http boo
  • 将一个整数从 C 客户端发送到 Java 服务器

    我使用此代码将一个整数从我的 Java 客户端发送到我的 Java 服务器 int n rand nextInt 50 1 DataOutputStream dos new DataOutputStream socket getOutput
  • 如何从 Sublime Text 编辑器调试 Java 应用程序

    有时我正在对相当大的 Java 应用程序进行简单的修复 但我不想打开 Eclipse 来执行此任务 Eclipse 启动时间很长 并且由于该项目是由大量子项目构建的 而这些子项目无论如何都是由 Maven 构建的 因此需要很长时间才能使用
  • 对于双核手机,availableProcessors() 返回 1

    我最近购买了一部 Moto Atrix 2 手机 当我尝试查看手机中的处理器规格时 Runtime getRuntime availableProcessors 返回 1 proc cpuinfo 也仅包含有关处理器 0 的信息 出于好奇
  • 空检查时可能未初始化错误

    我正在检查变量是否已初始化 但此时 netbeans 给了我variable reader might not have been initialized警告 我该如何解决 抑制这个问题 这是我的代码 摘要 final Reader rea
  • Volley 在第一次调用方法时返回 null

    我正在尝试使用 volley 从服务器检索数据 但是当我第一次调用此方法时 我收到服务器的响应 但该方法返回 null 如果我第二次调用它 我会得到最后的响应 public String retrieveDataFromServer Str

随机推荐

  • 请求跨域 CORS policy: No ‘Access-Control-Allow-Origin‘

    目录 1 跨域和同源 2 CORS 跨域资源共享 解决跨域 2 1 前端解决 不推荐 2 2 Nginx 解决跨域 2 3 tomcat 解决跨域 2 4 SpringBoot 服务解决跨域 3 总结 如在浏览器控制台看到类似于下边的报错
  • tomcat下部署jenkins

    tomcat简介 Tomcat是Apache 软件基金会 Apache Software Foundation 的Jakarta 项目中的一个核心项目 由Apache Sun 和其他一些公司及个人共同开发而成 由于有了Sun 的参与和支持
  • 敏捷开发---故事拆解

    很多时候 故事拆解利用模块化处理方式执行 但是跟多事小团队内部协商进行ac处理 体验问题的处理 这种弊端是 缺乏故事完整性 建议 采用全面鱼骨特性 进行小团队作战
  • 理解Python中的with…as…语法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 更详细的参考 http www ibm com developerworks cn opensource os cn pythonwith http blog csdn n
  • padStart()与padEnd()

    padStart padStart 方法 用另一个字符串填充当前字符串 如果需要的话 会重复多次 以便产生的字符串达到给定的长度 从当前字符串的左侧开始填充 语法 str padStart targetLength padString 参数
  • JTS:02 使用WKB操作数据

    版本 org locationtech jts jts core 1 19 0 链接 github 代码 import org locationtech jts geom Coordinate import org locationtech
  • 高德地图通过图层layer实现对海量点的可视化渲染

    一 可视化海量点应用场景 在正文开始之前我先说说我为啥会使用这个技术来实现数据的可视化 事情是这样的 我接手了一个项目 里面有个需求是在地图上标记出他们公司的产品的使用分布 我接手的时候呢 我前面的那位大哥是使用marker点覆盖物 加上f
  • Navigation Preview unavailable in Android Studio 3.4 Preview

    Navigation Preview unavailable in Android Studio 3 4 Preview 最近在学Jetpack Navigation组件 但是在写navigation资源文件的时候 Preview 显示不出
  • 周更计划----web安全学习

    本周做题 ctfshow web入门 信息搜集1 18 目录 web1 web2 web3 web4 web5 web6 web7 web8 web9 web10 web11 web12 web13 web14 web15 web16 we
  • mysql多表查询

    多表关系分类 一对一 任意一方添加外键 关联另外一方的主键 并且设置外键唯一unique 一对多 多对一 在多的一方建立外键 指向一的一方的主键 多对多 将两张表的主键提取出来建立一张中间表 直接查询 会产生无效的笛卡尔积 select f
  • physx选择显卡还是cpu_玩转显卡,再也不用担心被坑

    对于显卡 相信大家都不陌生 无论是玩游戏 还是从事专业的图形设计 有一块好显卡才能如有神助 所以 今天小编就来带大家认识一下显卡本卡 01 什么是显卡 从字面上理解显卡是显示接口卡 显卡英文全称Video card或Graphic card
  • 解决Maven打包报错Could not transfer artifact xxx.xxx找不到依赖的问题

    解决Maven打包报错Could not transfer artifact xxx xxx找不到依赖的问题 概述 方案一 方案二 方案三 作者使用的这种方案 命令事例 概述 当我用idea导入一个新的maven项目 配置好maven仓库
  • 浏览器控制台报错net::ERR_CONNECTION_RESET原因:

    浏览器控制台报错net ERR CONNECTION RESET原因 浏览器控制台报错net ERR CONNECTION RESET原因 浏览器控制台错误 101 net ERR CONNECTION RESET 的本身含义就是这个网站存
  • Web前端开发技术课程大作业,期末考试

    Web前端开发技术课程大作业 期末考试 作业要求 最终界面 部分代码呈现 index html login html index css login css swithpic js 完整代码素材下载 作业要求 网站前端程序不仅要能够把用户要
  • linux下使用sed命令将文件的LF转为CRLF

    linux下使用sed命令将文件的CRLF转为LF 只要将每行中 r变成空就OK 以下命令为将file中的CRLF转为LF sed i s r g file 以下命令为将目录中 c文件和 h文件中的CRLF转为LF find regex c
  • 牛客SQL34: 牛客直播各科目同时在线人数(最大值问题)

    牛客SQL34 牛客直播各科目同时在线人数 最大值问题 内容目录 牛客SQL34 牛客直播各科目同时在线人数 最大值问题 一 描述 二 思路解析 三 代码 四 问题思考 一 描述 牛客某页面推出了数据分析系列直播课程介绍 用户可以选择报名任
  • 考研OS备考

    本文主要是考研复试备考自用 所以课后习题答案主要是简答题部分 此外还有其他的简答补充 如果发现有误 欢迎在评论区或者私信指出 计算机操作系统 汤小丹慕课版 课后习题答案 考研备考 第1章 操作系统引论 第1章 课后习题答案 第1章 零碎知识
  • 性能计数器

    性能计数器 Performance Object Counter Description Processor processor Time 指处理器执行非闲置线程时间的百分比 测量处理器繁忙的时间 这个计数器设计成用来作为处理器活动的主要指
  • 成都亚恒丰创科技USB-CAN和CAN分析仪接口方式

    USB CAN和CAN分析仪接口方式 导语 随着现代汽车电子技术的飞速发展 CAN总线成为了汽车领域中最常用的通信协议 而在进行CAN总线的调试和分析时 CAN分析仪是一种必不可少的工具 本文将介绍USB CAN接口和CAN分析仪的基本原理
  • Spring参数校验--List<E>类型参数校验

    1 遇到的问题 今天开发接口 遇到请求参数固定为List