写点什么

参数校验如何优雅的处理

用户头像
卢卡多多
关注
发布于: 6 小时前
参数校验如何优雅的处理

假期的第二天,哈喽是,这里是卢卡的生活记录。


今天是讲讲关于参数验证的问题


关于项目中常见的问题解析



关于参数验证的相关问题

1.关于项目开发中验证非空,重复的操作:

解答:


当一个参数验证是否非空的时候,通常是先要确定这个参数是对象的属性还是集合的形式,我们采用分类讨论的思想开始解决:

1.1 对象参数非空验证:

①(利用 spring valid 来解决)


    @NotNull(message = "数据录入方式不能为空,请检查后重新填写")    private Integer dataMode;    
@NotBlank(message = "数据名称不能为空") @Size(max = 20, message = "数据名称,20汉字以内") @Pattern(regexp ="^[\\u4E00-\\u9FA5A-Za-z0-9-.' ]{1,20}$", message = "数据名称必须是中文、英文字母、数字") private String dataName;
/*对待对象中的属性,如果是String类型的,根据@valid的注解--使用的是@Notblank来实现非空验证,如果是其他类型,一般使用的是@NotNull验证参数非空,但当然还关于正则校验以及数据长度得注解*/
复制代码


关于 spring valid 注解的使用,可以看看这个快速上手的博客


https://blog.csdn.net/u012240455/article/details/81841882


②利用 hutool 工具库验证参数;


package cn.hutool.core.util;//我们使用的是hutool的工具类,一个Java的代码工具库
public static boolean isNotBlank(CharSequence str) { return !isBlank(str); } public static boolean isBlankIfStr(Object obj) { if (null == obj) { return true; } else { return obj instanceof CharSequence ? isBlank((CharSequence)obj) : false; } }
//验证String类型的是否是空 public static boolean isEmpty(CharSequence str) { return str == null || str.length() == 0; }
/* CharSequence---String类的父类,字符串序列,展示出字符串的基本信息,比如int length();
instanceof: java 中的保留字,常用于三元运算法中,含义为比较 左侧对象是否是 instanceof 右侧对象的实例 例如 object instanceof CharSequence(实现类有string,stringbuffer,StringBuilder) */
复制代码


记录一下之前的面试题:


StringBuilder StringBuffer 的区别


StringBuilder StringBuffer都是可变的字符序列。它们都继承于AbstractStringBuilder,实现了 CharSequence 接口。但是,StringBuilder 是非线程安全的,而 StringBuffer 是线程安全的。

1.2 对象集合参数非空验证(集合)

解答: 对于集合,验证是否为空,最直接的是将集合尺寸 size()求出来


①集合本身的 size()方法,如果大于 0,证明为非空


ArrayList.size(); //
HashMap.size();
复制代码


②根据 spring 自带工具类解决,collecitonUtils


package org.springframework.util;
//spring框架自己工具类,适用于List,MaPCollectionUtils.isEmpty(List) //HashMAP的 Map has=new HashMap(); CollectionUtils.isEmpty(has);
复制代码


③根据 hutool 自带 java 类库解决,Collutil


//spring框架自己工具类,适用于List,MaPCollutil.isEmpty(List)
复制代码


这里添加一个创建 UUID 的便捷写法


UUID.randomUUID().toString().replaceAll("\\-", "")
复制代码

1.3 对于验证,当前集合中是否有重复数据,如何找到具体的重复数据

验证集合中是否有重复数据,我会查看便利每个元素验证重复


//判定一个集合中不能有重复的数据,集合的工具类
for (String value : dataList) {int frequency = Collections.frequency(dataList, value);
if (frequency > 1) { System.out.println("集合中参数"+value+"已经存在") //可以直接删除当前的元素 dataList.remove(); }
复制代码

2.数据交互过程中,Json 怎么转化;

在接口开发过程中,我们对数据进行操作,查询到的数据结构,经过我们后端数据验证和过滤的操作,返回给前端 VO 对象,其实我们有一个统一的对接查询数据的对象,这个对象就是 Result,对标数据返回对象,一下就是简洁版的 Result;

1.开发系统中一个标准的接受数据的对象

Result


/*  标准的数据返回对象,一般用这个作为对接对象,lombok*/@Datapublic class Result implements Serializable{        //返回的code    private Integer code;          //返回的信息    private String  message;        //返回的data数据     private T data;        //请求编号    private String requestId;       }//其中data里面有大的json数据, 一般都封装成一个Map对象
复制代码


Json 作为统一数据通用传输数据格式,一直是作为前后端主力存在;


然后我们将得到的数据对象,转化成 JSON;

2.得到对象 Result 如何拆解得到自己需要的 Data 数据

//hutool的类库
jsonutil.toJsonStr(object o); //对象转化成json
Map dataMap=new HashMap();dataMap.putAll(JSONUtil.toBean(JSONUtil.toJsonStr(result.getData()), Map.class));//将对象data数据转化成map

//然后我们需要哪个具体的数据:比如说 data 中数据都在 result中object o =dataMap.get(result); //拿到所有的有效数据
//比如说这里面都是Student的数据,以学号开头,代表一个学生数据Student request = JSONUtil.toBean(JSONUtil.toJsonStr(o), Student.class);//获取当前学生的数据
复制代码


对于参数验证,我们采取注解,以及相应的属性约束,


对于 Typora 中代码块的直接显示:


option+command+c 输入一个代码块

3.标准的一个实体开发类有哪些字段

import java.util.*import lombok.Data;    /*学生表*/    @Data  public class Student implements Serializable{        private static final long serialVersionUID=-65652384849505U393L;         //主键自增id    @TableId(type=IdType.INPUT)    private String oid;          //学生ID    private String studentId;     //姓名    private String name;    //分数    private double score;    //是否删除 1-删除 2-未删除    private Integer deteleteType;    //性别 1-男 2-女 3-未选择    private Integer genderType;    //创建人    private String  createorName;    //创建时间    private Timestamp createTime;    //修改人    private String  modifyName;    //修改时间    private Timestamp modifyTime;  }
复制代码


希望我们共同进步

发布于: 6 小时前阅读数: 5
用户头像

卢卡多多

关注

努力寻找生活答案的旅途者 2020.04.12 加入

公众号:卢卡多多,欢迎一起交流学习

评论

发布
暂无评论
参数校验如何优雅的处理