网站首页 > 精选教程 正文
背景:
在项目管理中,我们通常要对一个个参数做验证, 前端校验,后端加校验,这里为了保证校验的一致性,我们需要将我们的校验写得比较高效率一点,不至于满篇都是is null的进行参数验证,为了成为一个成熟的工程师,我们要开始干活了,干货满满
关于参数验证的相关问题
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}#34;, message = "数据名称必须是中文、英文字母、数字")
private String dataName;
/*
对待对象中的属性,如果是String类型的,
根据@valid的注解--使用的是@Notblank来实现非空验证,如果是其他类型,
一般使用的是@NotNull验证参数非空,但当然还关于正则校验以及数据长度得注解
*/
复制代码
关于 spring valid注解的使用,可以看看这个快速上手的博客
blog.csdn.net/u012240455/…
②利用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,MaP
CollectionUtils.isEmpty(List)
//HashMAP的
Map has=new HashMap();
CollectionUtils.isEmpty(has);
复制代码
③根据hutool自带java类库解决,Collutil
//spring框架自己工具类,适用于List,MaP
Collutil.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
*/
@Data
public 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;
}
作者:卢卡斯lucas
链接:https://juejin.cn/post/6919298850193604616
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- 上一篇: 方法和+=符号的运算
- 下一篇: SpringBoot熔断的简单理解
猜你喜欢
- 2024-11-17 方法和+=符号的运算
- 2024-11-17 Java运算符之比较运算符
- 2024-11-17 《Java开发手册灵魂13问》正式上线,带你剖析阿里巴巴的开发细节
- 2024-11-17 03_Java_基础_表达式
- 2024-11-17 如何在 Python 中使用三元运算符?
- 2024-11-17 三目运算符的空指针问题,终于被阿里巴巴开发手册收录了
- 2024-11-17 Elasticsearch:painless script语法编程和入门实战
- 2024-11-17 golang三元表达式
- 2024-11-17 Java数组案例
- 2024-11-17 重大线上事故!三元表达式引发的空指针问题
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)