当前位置: 首页 > news >正文

郑州网站建设目标wordpress标点出现在行首

郑州网站建设目标,wordpress标点出现在行首,上海建设工程质量检测中心好吗,开发信息系统软件有哪些背景: 我们的接口是一个List对象,对象里面的数据基本都有一些基础数据校验的注解,我们怎么样才能校验这些基础规则呢? 我们在导入excel文件进行数据录入的时候,数据录入也有基础的校验规则,这个时候我们又…

背景:

  • 我们的接口是一个List对象,对象里面的数据基本都有一些基础数据校验的注解,我们怎么样才能校验这些基础规则呢?

  • 我们在导入excel文件进行数据录入的时候,数据录入也有基础的校验规则,这个时候我们又该如何少写代码让Validation框架来帮我们完成这些基础校验呢?

带着这个疑问,喊一句:翠花,上酸菜。

正文

首先定义我们的Validation的基础类,基础类只有一个字段:errMsg,用于我们校验不通过时候存储我们的提示信息:

@Data
public class ValidationBaseDTO {private String errMsg;
}

然后定义我们的测试对象类,搞一个简单的,这个DTO集成我们的校验基础类

@Data
public class ValidationTestDTO extends ValidationBaseDTO {@NotEmpty(message = "用户名不允许为空!")private String userName;@NotEmpty(message = "用户code不允许为空")private String userCode;private int age;}

然后编写咱们的校验工具类:

public class ValidationUtils{public static <E, T extends ValidationBaseDTO> List<T> validate(Validator validator, E e) {return validate(validator, e, Default.class);}public static <E, T extends ValidationBaseDTO> List<T> validate(Validator validator, E e, Class<?> groupClass) {Set<ConstraintViolation<E>> set = validator.validate(e, groupClass);if (CollectionUtils.isEmpty(set)) {return null;}Map<String, List<ConstraintViolation<E>>> resultGroup = set.stream().collect(Collectors.groupingBy(item -> item.getPropertyPath().toString().substring(0, item.getPropertyPath().toString().indexOf("."))));return resultGroup.entrySet().stream().map(item -> {T targetObject = (T)item.getValue().get(0).getLeafBean();String errMsg = String.join("|", item.getValue().stream().map(ConstraintViolation<E>::getMessage).collect(Collectors.toList()));targetObject.setErrMsg(errMsg);return targetObject;}).collect(Collectors.toList());}}

校验工具类有了,那还得搞一个测试用的Controller

 
@Slf4j
@RestController
@RequestMapping(value = "validation")
@AllArgsConstructor
public class ValidationTestController {private final Validator validator;@RequestMapping(value = "validationTest")public CommonResult<List<ValidationTestDTO>> validationTest() {// 例如我们通过Excel导入的数据有两条,属性全为空ValidationTestDTO validationTestDTO1 = new ValidationTestDTO();ValidationTestDTO validationTestDTO2 = new ValidationTestDTO();List<ValidationTestDTO> validationTestDTOList = new ArrayList<>();validationTestDTOList.add(validationTestDTO1);validationTestDTOList.add(validationTestDTO2);// 校验结果如果为空,则说明全部通过,如果不为空,则说明有的校验没有通过List<ValidationTestDTO> resultList = ValidationUtils.validate(validator, new ValidatedList<>(validationTestDTOList));return ResultUtil.success(resultList);}
}

这里不得不提的就是,Validator 在Spring框架里面是有被实例化的,且由Sping框架管理,我们直接注入就可以了

差点忘了,如果需要校验List,我们还需要自定义一个ValidationList类,如下:

public class ValidatedList<E> implements List<E>, Serializable {public ValidatedList(List<E> eList){this.list = eList;}@Validprivate List<E> list = new LinkedList<>();@Overridepublic int size() {return list.size();}@Overridepublic boolean isEmpty() {return list.isEmpty();}@Overridepublic boolean contains(Object o) {return list.contains(o);}@Overridepublic Iterator<E> iterator() {return list.iterator();}@Overridepublic Object[] toArray() {return list.toArray();}@Overridepublic <T> T[] toArray(T[] a) {return list.toArray(a);}@Overridepublic boolean add(E e) {return list.add(e);}@Overridepublic boolean remove(Object o) {return list.remove(o);}@Overridepublic boolean containsAll(Collection<?> c) {return list.containsAll(c);}@Overridepublic boolean addAll(Collection<? extends E> c) {return list.addAll(c);}@Overridepublic boolean addAll(int index, Collection<? extends E> c) {return list.addAll(index, c);}@Overridepublic boolean removeAll(Collection<?> c) {return list.removeAll(c);}@Overridepublic boolean retainAll(Collection<?> c) {return list.retainAll(c);}@Overridepublic void clear() {list.clear();}@Overridepublic E get(int index) {return list.get(index);}@Overridepublic E set(int index, E element) {return list.set(index, element);}@Overridepublic void add(int index, E element) {list.add(index, element);}@Overridepublic E remove(int index) {return list.remove(index);}@Overridepublic int indexOf(Object o) {return list.indexOf(o);}@Overridepublic int lastIndexOf(Object o) {return list.lastIndexOf(o);}@Overridepublic ListIterator<E> listIterator() {return list.listIterator();}@Overridepublic ListIterator<E> listIterator(int index) {return list.listIterator(index);}@Overridepublic List<E> subList(int fromIndex, int toIndex) {return list.subList(fromIndex, toIndex);}
}

如果这个类不定义,直接传入我们请求参数的List,那是无效的;

启动,看效果:

添加图片注释,不超过 140 字(可选)

http://www.yayakq.cn/news/227114/

相关文章:

  • 什么是域名为什么需要它小红书怎么做关键词排名优化
  • 耳机商城网站开发网站建设配色方案
  • 电子商务网站与建设课件学校网站建设先进事迹
  • wordpress子站服务器维护通知
  • 漯河做网站优化徐州网站建设网络推广
  • 做网站需要申请专利吗wordpress付款后查看内容
  • 一个网站的入口网页又称为微信开放平台的应用场景
  • 自己的电脑做服务器搭建网站使用百度地图导航收费吗
  • 一般公司网站用什么域名套餐北京市教学名师项目建设网站
  • 网站安全设计网站建设征求意见的通知
  • 驻马店高端网站建设国际购物网站平台有哪些
  • 制作简单门户网站步骤谷歌chrome浏览器官方下载
  • 做网站客户总是要退款移动端网站制作案例
  • 长沙网站制作策划绍兴以往网站招工做
  • 做代理稳妥的彩票网站有哪些电商app开发公司
  • 搭建网站的方案江门排名优化公司
  • 汉中专业网站建设推广wordpress wp_insert_attachment
  • 中国人做外贸生意的网站学python网站开发
  • 浏览器如何推广自己网站做服装在哪个网站找
  • 浙江台州网站制作永州网页定制
  • 手机网站制作 费怎么做分录网站的建设方法包括
  • 如何在百度里建网站网页制作教程(第三版)
  • 句容市建设工程管理处网站网站建设总体要求
  • 怎么在网站底部做备案号百度关键词权重查询
  • 网站建设可行性研究报告范文淘宝客搜索网站怎么做
  • 江西中创建设有限公司网站沪深300指数
  • 用帝国cms做网站网站原创内容
  • 网站 手机版 电脑版 怎么做的seo百度优化排名
  • 如何查看网站的外链古建设工程造价管理协会网站
  • 订做网站建设软件定制开发费用