百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

项目中的参数限制、非空、以及集合中的验证,你真的会做吗

toyiye 2024-06-21 12:09 10 浏览 0 评论

背景:

在项目管理中,我们通常要对一个个参数做验证, 前端校验,后端加校验,这里为了保证校验的一致性,我们需要将我们的校验写得比较高效率一点,不至于满篇都是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
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码