首页 > 其他分享 >使用@Validated校验List集合中数据失效

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

时间:2024-09-14 14:02:38浏览次数:8  
标签:return List list 校验 NotNull Override import Validated public

我们可以写一个集合实现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());
}
}

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

标签:return,List,list,校验,NotNull,Override,import,Validated,public
From: https://www.cnblogs.com/cc921/p/18413834

相关文章

  • MySQL show processlist说明
    showprocesslist和showfullprocesslistprocesslist命令的输出结果显示了有哪些线程在运行,不仅可以查看当前所有的连接数,还可以查看当前的连接状态帮助识别出有问题的查询语句等。如果是root帐号,能看到所有用户的当前连接。如果是其他普通帐号,则只能看到自己占用的连接。showp......
  • elementUI--el-form表单数据校验
    一、普通的值类型的数据校验①设置 el-form-item的prop 值与 formdata中定义的key 保持一致`②如果rules需要通过el-form统一设置,rules的key 定义也与prop保持一致(如果不一致,需要在el-form-item中手动指定)③复杂的校验函数可通过 validator 单独定义<el-for......
  • Arrays.asList方法
    Arrays.asList() 是Java中的一个静态方法,它属于 java.util.Arrays 类。这个方法的作用是将一个数组转换成一个固定大小的列表(List)。需要注意的是,这个列表是由原始数组支持的,因此这个列表的大小是固定的,并且不支持添加或删除元素的操作,因为这样的操作会改变列表的大小,而底......
  • 黑马面试集合(ArrayList, HashMap)篇笔记整理,结尾附Java的集合相关高频面试题及答案
    集合操作数据的特点-算法复杂度分析数据结构算法复杂度分析为什么要进行复杂度分析?指导编写性能更优的代码评判别人写代码的好坏时间复杂度分析时间复杂度分析:来评估代码的执行耗时的假设每行代码的执行耗时一样:1ms分析这段代码一共执行多少行?3n+3......
  • Java 假设有一个对象list 有4列,4和3比较name 如果name不相同则记录4的version值string
    可以使用传统循环或Java8的流(Stream)API来实现这一逻辑。以下是这两种方法的示例代码:1.使用传统循环importjava.util.List;publicclassMain{publicstaticvoidmain(String[]args){List<MyObject>list=...;//初始对象列表String......
  • Java怎么把多个对象的list的数据合并
    1.示例一:创建几个包含Person对象的List,并将它们合并成一个新的List在Java中,将多个对象的List合并通常涉及到遍历这些List并将它们的元素添加到一个新的List中。这里,我将给出一个详细的代码示例,该示例将展示如何将多个包含相同类型对象的List合并成一个List。假设我们有一个简单的......
  • Java怎么把多个对象的list的数据合并
    1.示例一:创建几个包含Person对象的List,并将它们合并成一个新的List在Java中,将多个对象的List合并通常涉及到遍历这些List并将它们的元素添加到一个新的List中。这里,我将给出一个详细的代码示例,该示例将展示如何将多个包含相同类型对象的List合并成一个List。假设我们有一个简单......
  • 某智能网关 list_service_manage存在命令执行漏洞
    漏洞描述瑞斯康达多业务智能网关list_service_manage.php存在未授权命令注入漏洞,攻击者利用可获取服务器权限。资产信息FOFA:body="/images/raisecom/back.gif"漏洞复现pocPOST/vpn/list_service_manage.php?template=%60whoami%3E%2Fwww%2Ftmp%2F1.txt%60HTTP/1.1H......
  • PbootCMS出现登录失败,表单提交校验失败等情况怎么办?
    当PbootCMS出现登录失败、表单提交校验失败等问题时,可以采取以下几种方法进行排查和解决:一、表单提交校验失败解决方案:刷新页面重试:尝试刷新页面,重新登录。这种情况可能是由于临时的网络问题或缓存问题导致的。删除 runtime 文件夹:删除项目根目录下的 runtime......
  • PBOOTCMS后台出现“登入失败:表单提交校验失败,刷新后重试!”等情况怎么办?
    当你在使用PBootCMS模板搭建的网站后台出现“登录失败:表单提交校验失败,请刷新后重试!”的问题时,可以尝试以下两种方法来解决:方法一:切换PHP版本登录到主机控制面板:登录到你的虚拟主机或服务器的控制面板。找到PHP版本切换选项:在控制面板中找到PHP版本切换的选项,通常这......