使用@Validated校验List集合中数据失效

news/2024/11/17 17:16:10/文章来源:https://www.cnblogs.com/cc921/p/18413834

我们可以写一个集合实现list,代码如下,在controller类上面不用加@Validated注解,在controller使用自定义ValidableList集合,对list进行封装,就可以对scheduleDtoList做参数校验处理。

@Api(tags = "xxxx 管理")
@RestController
@RequestMapping("aaa/indicatorDeviceCategoryDetailsController")
public class IndicatorDeviceCategoryDetailsController {

@PostMapping("/batchUpdateIndicatorDeviceCategorys")
@ApiOperation("根据参数dto-批量修改告警设备或异常设备的数据值")
public ResponseVo batchUpdateIndicatorDeviceCategoryDetails(@RequestBody @Validated ValidableList<IndicatorDeviceScheduleDto> scheduleDtoList){
return indicatorDeviceCategoryDetailsService.batchUpdateIndicatorDeviceCategoryDetails(scheduleDtoList);
}
}

 

优点,异常清晰明了


import lombok.Data;
import org.jetbrains.annotations.NotNull;

import javax.validation.Valid;
import java.util.*;
import java.util.function.UnaryOperator;

/**
* @author psd 用于校验指定的List集合里面的数据
*/
@Data
public class ValidableList<E> implements List<E> {

@Valid
private List<E> list = new ArrayList<>();

public List<E> getList() {
return list;
}

public void setList(List<E> list) {
this.list = list;
}

@Override
public int size() {
return list.size();
}

@Override
public boolean isEmpty() {
return list.isEmpty();
}

@Override
public boolean contains(Object o) {
return list.contains(o);
}

@NotNull
@Override
public Iterator<E> iterator() {
return list.iterator();
}

@NotNull
@Override
public Object[] toArray() {
return list.toArray();
}

@NotNull
@Override
public <T> T[] toArray(@NotNull 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(@NotNull Collection<?> c) {
return list.containsAll(c);
}

@Override
public boolean addAll(@NotNull Collection<? extends E> c) {
return list.addAll(c);
}

@Override
public boolean addAll(int index, @NotNull Collection<? extends E> c) {
return list.addAll(index, c);
}

@Override
public boolean removeAll(@NotNull Collection<?> c) {
return list.removeAll(c);
}

@Override
public boolean retainAll(@NotNull Collection<?> c) {
return list.retainAll(c);
}

@Override
public void replaceAll(UnaryOperator<E> operator) {
List.super.replaceAll(operator);
}

@Override
public void sort(Comparator<? super E> c) {
List.super.sort(c);
}

@Override
public void 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);
}

@NotNull
@Override
public ListIterator<E> listIterator() {
return list.listIterator();
}

@NotNull
@Override
public ListIterator<E> listIterator(int index) {
return list.listIterator(index);
}

@NotNull
@Override
public List<E> subList(int fromIndex, int toIndex) {
return list.subList(fromIndex, toIndex);
}

@Override
public Spliterator<E> spliterator() {
return List.super.spliterator();
}
}

 

温馨提示,要写下面统一异常处理,要不然拦截不了异常

import com.dx.major.common.bean.ResponseVo;
import org.springframework.http.HttpStatus;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

import lombok.extern.slf4j.Slf4j;

/**
* @author psc 统一参数校验异常处理类
*/
@Slf4j
@ControllerAdvice
public class ValidatedExceptionHandler {

/**
* 处理@Validated 参数校验异常
*
* @param exception
* 异常类型
* @return 异常信息
*/
@ResponseBody
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseVo exceptionHandler(MethodArgumentNotValidException exception) {
BindingResult result = exception.getBindingResult();
StringBuilder builder = new StringBuilder();
if (result.hasErrors()) {
result.getAllErrors().forEach(p -> {
FieldError fieldError = (FieldError) p;
log.warn("Bad Request Parameters: dto entity [{}],field [{}],message [{}]", fieldError.getObjectName(), fieldError.getField(),
fieldError.getDefaultMessage());
builder.append(fieldError.getDefaultMessage());
});
}
return ResponseVo.paramError(builder.toString());
}
}

**错误信息详情如下: **简单明了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/797006.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLOV5 onnx推理 python

pip install onnx coremltools onnx-simplifier3.使用onnx-simplier简化模型 python -m onnxsim best.onnx best-sim.onnx # coding=utf-8 import cv2 import numpy as np import onnxruntime import torch import torchvision import time import random from utils.general i…

C#窗体应用中打开控制输出内容

窗体程序中打开控制台输出内容 namespace WinForms中打开控制台 {public partial class Form1 : Form{/////////////以下控制台调用相关代码///////////////////////////[System.Runtime.InteropServices.DllImport("kernel32.dll", SetLastError = true)][return: S…

推荐3款卓越的 .NET 开源搜索组件库

前言 最近有不少同学提问;.NET有哪些开源的搜索组件库可以推荐的吗?,今天大姚给大家推荐3款卓越的 .NET 开源搜索组件库,希望可以帮助到有需要的同学。 Elasticsearch .NET Elasticsearch 的 .NET 客户端为 Elasticsearch API 提供强类型请求和响应。它将协议处理委托给 El…

ATTCK红队评估(红日靶场5)

‍ 靶机介绍此次靶场虚拟机共用两个,一个外网一个内网,用来练习红队相关内容和方向,主要包括常规信息收集、Web攻防、代码审计、漏洞利用、内网渗透以及域渗透等相关内容学习,此靶场主要用来学习,请大家遵守网络网络安全法。‍‍注意:Win7双网卡模拟内外网‍ 环境搭建使用…

中秋节快乐简单html页面

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>中秋快乐</title> <style>@fo…

专业角度深入讲解:大模型备案(生成式人工智能)

一、什么是大模型备案? 大模型备案是指大模型产品在向公众开放及商用之前,经过国家互联网信息办公室(简称“网信办”)等监管部门的备案审批过程。 是为加强生成式人工智能服务的合规管理,通过备案制度,促进人工智能技术的健康发展,建立起一个既安全又可靠的人工智能服务…

PbootCMS怎么调用网站的留言数和文章总数

在 PBootCMS 中,可以使用 pboot:sql 标签来自定义任意查询语句并循环输出。下面详细介绍如何使用此标签来调用网站的留言数和文章总数。 1. 调用网站的留言数 示例代码html{pboot:sql sql="select count(id) as total from ay_message"}留言合计:[sql:total]条 {/p…

Github数据泄露事件处置常见技巧

手动获取个人邮箱 方法一:通过commits找到作者提交的,点击箭头位置在出现的url后面加上.patch https://github.com/xxxx/xxxexample/commit/4a0b0613da9ca66c61bc9e8eeebe7325c4908afeb 修改后的 https://github.com/xxxx/xxxexample/commit/4a0b0613da9ca66c61bc9e8eeebe732…

2024年9月中国数据库排行榜:openGauss系多点开花,根社区优势明显

本文解读墨天轮数据库流行度排行榜,从产业格局视角梳理行业发展走向,开源势力力争上游、阿里华为两极鼎立云上云下各争先,欢迎一起阅读交流!在墨天轮发布的9月中国数据库流行度排行榜中,中国数据库产业格局进一步聚集刷新,呈现出3大显著特征:开源势力力争上游显优势领先…

PbootCMS模板自动生成当前页面二维码

在 PBootCMS 中,qrcode 标签用于生成对应文本的二维码图片。这对于产品列表页或详情页为每个产品生成二维码非常有用。以下是详细的使用说明和示例代码。 1. qrcode 标签的基本用法 参数说明string=*:指定生成二维码的文本内容。2. 示例代码 生成产品详情页的二维码 假设你需…