背景:

在项目管理中,我们通常要对一个个参数做验证, 前端校验,后端加校验,这里为了保证校验的一致性,我们需要将我们的校验写的比较高效率一点,不至于满篇都是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}$", message = "数据名称必须是中文、英文字母、数字")

private String dataName;

/*

对待对象中的属性,如果是String类型的,

根据@valid的注解--使用的是@Notblank来实现非空验证,如果是其他类型,

一般使用的是@NotNull验证参数非空,但当然还关于正则校验以及数据长度得注解

*/

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

②利用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都是可变的字符序列。它们都继承于AbstractStringBuilder,实现了CharSequence接口。

但是,StringBuilder是非线程安全的,而StringBuffer是线程安全的。

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

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

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

HashMap.size();

②根据spring自带工具类解决,collecitonUtilspackage 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;

}

3.推荐后端学习的提升框架:

关于后端中表中自id:推荐mybatisPlus 官网,和下面的一个博客,感兴趣就多看看吧;

新手创建->ID自增的过程

我是卢卡,关于参数的分享在这里就先告一断落了,如果这篇文章对你有帮助,请点个赞再走,谢谢

希望我们共同进步

java中如何限制输入非空_项目中的参数限制、非空、以及集合中的验证,你真的会做吗(Java)...相关推荐

  1. java统计一个字符串中每个字符出现的次数_剑指offer算法题054:字符流中第一个不重复的字符...

    推荐阅读:宇宙条的工作总结:一年前还在面试找工作,一年后在面试找工作的学弟学妹们:第一次当面试官的经历分享小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合 ...

  2. Java对性别默认值为男_当对象或对象属性为空时,如何安全给对象或对象属性添加默认值...

    今天遇到的问题,也是写代码的习惯问题,逻辑没有问题,但不规范,也不安全, 容易出现漏洞. 先将代码贴出: String isPrintLogo = vodInfoDto.getIsPrintLogo( ...

  3. lamda获取参数集合去空_(转)Java8使用lambda表达式进行集合的遍历

    本文转自 我们经常会用到各种集合,数字的,字符串的还有对象的.它们无处不在,哪怕操作集合的代码要能稍微优化一点,都能让代码清晰很多.在这章中,我们探索下如何使用lambda表达式来操作集合.我们用它来 ...

  4. java指定存入arraylist值_Java高效打印出0000-9999之间所有的值存到arraylist集合中

    Java高效打印出0000-9999之间所有的值存到arraylist集合中public static void main(String[] args) { /** * 推荐用Java8 的新特性St ...

  5. xml文件中同时满足多个条件_问与答81: 如何求一组数据中满足多个条件的最大值?...

    学习Excel技术,关注微信公众号: excelperfect Q:在工作表中有一些数据,如下图1所示,我想要获取"参数3"等于"A"."参数4&qu ...

  6. java运行内存溢出指什么内存溢出_项目正常启动,但是在访问页面的时候java报内存溢出错误。。小感悟...

    先说一下背景,前两天由于本地的oracle数据库问题,导致项目启动数据库获取连接池错误,不能正常启动,折腾了一段时间,本地数据库整好了,想在本地把项目跑起来试试,把项目部署在tomcat正常启动,但是 ...

  7. java 对象验证非空_判断Bean对象指定字段非空

    判断Bean对象指定字段非空. 方案: 在bean对象上增加注解,指定字段非空,返回异常信息有明确字段描述,省去不必要的if.else判断. 新建注解类 /** * 参数校验,判断字段非空.返回异常文 ...

  8. java判断二维数组是否空_判断二维数组是否为空

    在Java程序设计里面,相信大部分人都知道如何判断一个一维数组是否为空,示例如下: public int primeNumberCount(int[] array){ if(array==null|| ...

  9. java内存地址和哈希值_数据哈希值的计算和在table中的存储位置

    我们知道,Objects中定义了hashcode()函数,用于计算对象的哈希值.并且在很多类中都对hashcode()函数进行了覆盖.但是在HashMap中并没有直接使用各个类的hash值,而是使用h ...

最新文章

  1. hellowolrd 的系统调用
  2. 更改Oracle数据库的SID
  3. 判断.java文件中getConnection与cleanUp数量是否匹配
  4. 如何拉取k8s镜像_K8s 从懵圈到熟练 – 镜像拉取这件小事
  5. leetcode - 967. 连续差相同的数字(集合、递归、动态规划)
  6. 数据库周刊 | DBA 核心技能
  7. 第二章 吸取jQuery之选择器和包装集
  8. 基于物理的渲染详尽指南 卷1光与介质:基于物理的渲染和着色理论
  9. 数据采集无线网服务器软件,WIFI智能数据盒
  10. php mysql 拖拉 报表_php+mysql 生成统计报表
  11. 《自己动手写操作系统》 第一章总结
  12. gcforest 深度森林原理及实现
  13. STK9 Object Browser灰色无法操作
  14. 华中农业大学和南京农业大学计算机,科学网—2015年国内几所农业大学的国家基金排名及评述 - 朱猛进的博文...
  15. 银河麒麟v10_银河麒麟发布V10系统 其使用的是技德系统Jstack技术
  16. 紫川歪传------------恶搞暴笑版
  17. 绝密计划:我在阿里打黑工
  18. Kubeadm创建集群
  19. uniapp ios打包详细步骤
  20. 做自媒体前期如何开始?

热门文章

  1. linux设置共享权限设置命令,Linux系列知识详解(三)--------- Linux链接命令和权限管理命令...
  2. asp.net 点击查询跳转到查询结果页面_如何控制报表组点查询后默认选择的 tab 页...
  3. MySQL 之全文索引
  4. python算法与数据结构-选择排序算法
  5. ubuntu18.04安装python的mysqlclient==1.4.6报错ERROR Command errored out with exit status 1python setup
  6. Python程序退出方式小结(亲测)
  7. 分布式数据库中间件Mycat百亿级数据存储(转)
  8. Go安装swagger:swagger的安装与使用
  9. 关于JQ的点击事件在微信手机端无响应的解决方案
  10. matlab删失数据威布尔,基于混合I型删失数据威布尔模型的可接受抽样计划