开发者社区> 问答> 正文

如何优雅的进行入参数据校验?

4000积分,笔记本支架*5

在日常的开发工作中,为了程序的健壮性,大部分方法都需要进行入参数据校验。最直接的当然是在相应方法内对数据进行手动校验,但是这样代码里就会有很多冗余繁琐的if-else,导致扩展性、可读性差,并且不易复用。那么日常工作中,什么场景下你会进行入参数据校验呢?你是如何进行校验的?有哪些优雅的处理方式呢?欢迎分享讨论~

本期话题:
1.在哪些场景下,你会进行入参数据校验的呢?
2.如何优雅的进行入参数据校验?你有哪些处理方式?欢迎分享~
截止2024年3月26日24时,参与本期话题讨论,将会选出2名幸运用户和3个优质讨论获得笔记本支架*1

幸运用户获奖规则:中奖楼层百分比为48%,88%,的有效留言用户可获得互动幸运奖。如:活动结束后,回复为100层,则获奖楼层为 100✖48%=48,依此类推,即第88位回答用户获奖。如遇非整数,则向后取整。
如:回复楼层为81层,则81✖48%= 38.88,则第39楼获奖。

image.png

优质讨论获奖规则:不视字数多,结合自己的真实经历分享,非 AI 生成。

未获得实物礼品的参与者将有机会获得 10-200 积分的奖励。

注:楼层需为有效回答(符合互动主题),灌水/复制回答将自动顺延至下一层。如有复制抄袭、不当言论等回答将不予发奖,阿里云开发者社区有权进行删除。获奖名单将于活动结束后5个工作日内公布,奖品将于7个工作日内进行发放,节假日顺延。

获奖名单:
优质奖:1245929580612639、六月的雨在钉钉、打不哭
幸运奖:听风de歌、syfqvwaky2kybyw22

展开
收起
提个问题 2024-03-18 17:03:35 1472 27
153 条讨论
参与讨论
取消 提交讨论
  • 1、关键业务进行参数校验
    2、发起支付时校验
    当然也有做的很绝的,我曾任职的一家公司,所有接口的请求参数都会加密到请求头,然后后端解密校验

    将校验逻辑与业务逻辑分离:将参数校验逻辑与业务逻辑分离可以提高代码的可读性、可维护性和复用性。可以通过使用注解、DTO、自定义校验器、AOP 等方式来实现校验逻辑与业务逻辑的分离。
    使用统一的异常处理机制:统一的异常处理机制可以简化代码,提高代码的可读性和可维护性。可以使用框架提供的异常处理机制,也可以自定义异常处理机制。
    提供友好的错误提示信息:友好的错误提示信息可以帮助用户快速定位问题,提高用户体验。错误提示信息应该清晰、准确、易于理解。
    1、使用注解
    2、使用 AOP:可以使用 AOP 来进行统一的参数校验。
    3、使用全局异常处理

    2024-03-27 11:03:09
    赞同 29 展开评论 打赏
  • 1.作为一位开发者,你会考虑将Vision Pro应用到编程中吗?你对此持有怎样的看法呢?
    会考虑。
    我觉得Vision Pro有以下优势
    图像处理:Vision Pro可以用于编程中的图像处理任务。例如,可以使用Vision Pro来提取图像中的特定对象或特征,对图像进行滤波、增强或修复等操作。这对于图像处理、计算机视觉和图像识别等领域的开发者来说是非常有帮助的。

    自动化测试:Vision Pro可以用于编写自动化测试脚本的开发过程中。通过图像识别,可以实现对用户界面的自动化测试,例如模拟用户的鼠标点击和键盘输入,以及验证页面中的元素和布局等。这可以提高测试的自动化程度,节省开发者的时间和精力。

    增强现实:Vision Pro可以与增强现实技术结合,为开发者提供更直观、沉浸式的编程环境。通过识别和跟踪现实世界中的对象,开发者可以在增强现实中编写代码、调试程序或进行虚拟现实交互。这将为开发者带来更多的创意和灵感,并提供更直观的开发体验。

    2024-03-26 17:46:21
    赞同 22 展开评论 打赏
  • 在日常开发工作中,几乎所有的对外接口接收外部输入时,都应当进行必要的入参数据校验。这是因为未经校验的数据可能导致程序出现异常、逻辑错误、安全漏洞等问题。
    HTTP API 接口:对接收到的请求参数进行校验,确认它们的数据类型、长度、格式、范围等是否符合接口定义的要求。
    函数/方法调用:特别是公共方法,需要保证传入的参数合法有效,防止因参数错误而导致的功能失效甚至系统崩溃。
    数据库操作:对即将插入或更新到数据库中的数据进行合法性校验,比如非空值校验、格式校验、关联性校验等。
    文件上传:验证上传文件的大小、类型、格式等属性是否合规,以防止服务器资源被滥用或恶意攻击

    2024-03-26 16:58:32
    赞同 21 展开评论 打赏
  • 手动校验:在方法内部使用if-else语句手动对入参数据进行校验。虽然这种方法比较直接,但容易导致代码冗余和可读性差的问题。
    使用校验框架:借助现有的校验框架,可以在方法参数上添加注解来定义校验规则,从而简化数据校验的过程。
    自定义注解:通过自定义注解和AOP技术,可以实现对方法参数的自动校验,提高代码的简洁性和可维护性。
    函数式编程:利用函数式编程的特性,可以编写简洁优雅的校验逻辑,提高代码的可读性和扩展性。

    2024-03-26 16:58:31
    赞同 22 展开评论 打赏
  • 1.不分场景,只要是前后端交互,携带的参数都要在接口进行校验,其目的首当其冲的就是为了安全,其次再说正确与否的问题。
    2.使用SpringBoot框架中自带的validator框架进行检验,一般常见的参数格式都已经满足,特定的不常见参数可以自行使用正则或自定义格式进行检验。
    3.常见参数使用javax.validation就可以满足,对象放在DTO检验,字符串使用@RequestParam检验等等……

    2024-03-26 15:14:51
    赞同 19 展开评论 打赏
  • 2使用合适的数据类型和格式:确保接收的数据类型和格式符合预期。例如,使用正则表达式验证字符串格式,使用日期时间函数验证日期格式,或使用类型检查来验证数字、布尔值等。

    设置必填字段和默认值:对于必填字段,明确指定其必要性,并确保在缺少必填字段时进行适当的处理。对于可选字段,可以设置默认值以提供更好的用户体验。

    范围和长度验证:针对数字、字符串或其他类型的数据,验证其范围和长度是否满足要求。例如,验证年龄是否在合理范围内,验证字符串长度是否符合最小和最大限制。

    输入过滤和清理:对于用户输入的数据,进行输入过滤和清理以防止潜在的安全漏洞,如SQL注入、跨站脚本攻击等。使用合适的过滤和消毒方法来确保输入数据的安全性。

    错误处理和反馈:在校验过程中,及时捕获错误并提供有意义的错误消息反馈给用户。清晰而友好的错误消息可以帮助用户理解问题,并提供必要的修复指导。

    适用正则表达式:正则表达式是一种强大的模式匹配工具,可用于验证和提取特定格式的数据。熟练运用正则表达式可以有效地进行数据校验。

    利用现有工具和库:许多编程语言和开发框架提供了数据校验的工具和库。利用这些工具可以简化开发过程,并提供一致性和可靠性的数据校验机制。

    单元测试和集成测试:编写针对数据校验的单元测试和集成测试是一种良好的实践。这些测试可以帮助验证校验逻辑的正确性,并确保数据校验的稳定性和可靠性。

    2024-03-26 15:12:47
    赞同 16 展开评论 打赏
  • 1API输入验证:对于接收和处理API请求的应用程序,进行输入数据的校验是必要的。这可以包括验证请求参数、请求体的结构、数据格式等,以确保API请求的有效性和一致性。

    2024-03-26 15:12:45
    赞同 13 展开评论 打赏
  • 1.在哪些场景下,你会进行入参数据校验的呢?
    只要是输入的数据都需要进行数据校验,为了保护自己系统,以免生成一些错误数据。
    2.如何优雅的进行入参数据校验?你有哪些处理方式?欢迎分享~
    这种我觉得主要是对一些公共的校验可以独立成服务,然后业务校验只能自己的业务自己做。

    2024-03-26 15:12:47
    赞同 13 展开评论 打赏
  • 1 主要是C端用户在操作的时候,用户群体不稳定的时候需要做各种校验,因为你不知道用户会怎么操作

    2024-03-26 14:42:52
    赞同 10 展开评论 打赏
  • 1文件上传校验:当用户上传文件时,进行文件类型、大小、扩展名等方面的校验是必要的。这有助于防止恶意文件上传和确保系统安全。

    2024-03-26 14:42:48
    赞同 9 展开评论 打赏
  • 1.在哪些场景下,你会进行入参数据校验的呢?
    比如在登录的时候对用户名、密码等需要格式和长度校验,避免安全问题。

    2024-03-26 14:34:36
    赞同 4 展开评论 打赏
  • 1 对用户提交的数据进行权限校验,防止用户看到不该看的数据造成数据泄露

    2024-03-26 14:28:40
    赞同 3 展开评论 打赏
  • 1.在哪些场景下,你会进行入参数据校验的呢?
    正常来讲就是表单提交,比如一些字段的校验,字段的长度,类型和有效性等,为了保护程序

    2024-03-26 14:26:31
    赞同 2 展开评论 打赏
  • 2我认为优雅进行入参校验应该遵循以下几点原则:

    定义清晰的入参规范。明确数据类型、格式、取值范围等要求。

    从外部入口入手。针对所有入参进行统一校验,及早发现问题。

    错误码分类。明确区分输入错误和业务错误,给出对应错误信息。

    精细化错误提示。指出具体那个字段有问题,批量错误一并给出。

    友好的错误处理。针对常见错误提供预设响应模板,给用户友好提示。

    逻辑分离。将校验逻辑从接口中剥离出单独模块,防止耦合。

    自定义校验注解。针对不同类型参数设计个性化注解进行校验。

    结果封装。将校验结果和数据一起返回,不影响后续处理。

    校验工具模块。开发工具类实现通用校验方式,提高重用性。

    自动化测试。编写定制化用例测试各类,保证质量。

    2024-03-26 14:18:06
    赞同 3 展开评论 打赏
  • 1数据库输入验证:在将数据存储到数据库中之前,进行数据校验是重要的。这可以包括验证数据的合法性、完整性、唯一性等,以避免无效或损坏的数据进入数据库。

    2024-03-26 14:15:27
    赞同 3 展开评论 打赏
  • 1.在哪些场景下,你会进行入参数据校验的呢?
    如订单数据需要校验价格、数量等字段是否匹配订单要求。保证数据完整性。

    2024-03-26 14:11:08
    赞同 3 展开评论 打赏
  • 1.在哪些场景下,你会进行入参数据校验的呢?
    表单验证:当用户提交表单数据时,对输入的数据进行校验是很重要的。这包括验证用户输入的格式、是否为空、长度限制、数据类型等,以确保数据的有效性和完整性。

    接口调用:在进行网络请求或调用API时,对传递的参数进行校验可以防止无效或错误的参数传递到后端服务。这可以包括验证数据类型、范围、必填字段等,并确保符合预期的格式和规则。

    安全性校验:校验输入数据的安全性是非常重要的,特别是防止潜在的安全漏洞和攻击,比如跨站脚本攻击(XSS)、SQL注入等。在这种情况下,校验输入数据的特殊字符、编码和长度等是必要的防御措施。

    数据库操作:在进行数据库操作时,对输入数据进行校验是防止数据损坏、数据丢失或数据泄露的重要步骤。这可以包括验证数据的合法性、唯一性、完整性等,以确保数据库的稳定性和数据的有效性。

    参数传递:当调用函数或方法,并传递参数时,对参数进行校验可以避免潜在的错误或异常。这包括验证参数的类型、范围、有效性等,以确保函数或方法的正确行为和输出结果。

    2024-03-26 13:59:25
    赞同 4 展开评论 打赏
  • 1.在哪些场景下,你会进行入参数据校验的呢?
    目前工作中主要是会对接口的入参进行校验,比如是用户表单,用户查询条件等

    2024-03-26 13:53:50
    赞同 3 展开评论 打赏
  • 在哪些场景下,你会进行入参数据校验的呢?

    1. 用户输入数据:
      当用户通过界面或者其他方式输入数据时,需要对输入的数据进行校验。这包括表单数据、用户提交的信息等。
      例如,检查用户名、密码、邮箱、电话号码等是否符合格式要求。
    2. API请求参数:
      当开发API接口时,需要对接收到的请求参数进行校验,确保参数的完整性、格式正确性和合法性。
      例如,检查参数是否为必填、参数类型是否正确、参数范围是否合法等。
    3. 文件上传:
      在接收用户上传的文件时,需要对文件的类型、大小、格式等进行校验,以防止恶意文件或者非法文件上传。
      例如,检查文件的扩展名、大小是否超出限制、是否包含恶意代码等。
    4. 数据库操作:
      在进行数据库操作时,需要对输入的数据进行校验,以防止SQL注入等安全问题。
      例如,使用参数化查询,避免拼接SQL语句;检查输入数据是否符合预期的数据类型和范围。
    5. 定时任务参数:
      当编写定时任务时,可能需要接收一些参数来指定任务的执行方式或者条件。
      例如,检查定时任务的执行时间是否符合要求、参数的取值范围是否正确等。
    6. 接口调用:
      当调用外部服务或者第三方API时,需要对传入的参数进行校验,以确保符合对方接口的要求,并提高系统稳定性。
      例如,检查调用接口的请求格式、参数是否符合文档规定、参数值是否合法等。
    7. 安全性校验:
      在涉及到安全性的操作时,如权限控制、加密解密等,需要对输入的数据进行校验,防止恶意攻击和数据泄露。
      例如,检查用户是否具有足够的权限、验证输入数据的合法性、对敏感数据进行加密等。
    8. 防止空指针和异常:
      对于可能为空的参数,进行空值校验,以防止空指针异常的发生。
      例如,在调用某个对象的方法前,先判断对象是否为空。

    如何优雅的进行入参数据校验?你有哪些处理方式?

    • 使用注解(Annotations):
      在一些现代编程语言中,如Java、Python等,可以使用注解来标记和验证参数。
      例如,在Java中可以使用javax.validation.constraints包中的注解,如@NotNull、@NotEmpty、@Size等,来对参数进行验证。
    • 自定义校验器(Custom Validators):
      针对特定的校验需求,可以编写自定义的校验器,以满足业务需求。
      例如,针对邮箱格式校验,可以编写一个自定义的校验器。

    • 异常处理:
      在参数校验不通过时,可以抛出自定义的异常,提示错误信息。

    2024-03-26 10:14:14
    赞同 2 展开评论 打赏
  • 小前端一枚,个人认为TypeScript的类型约束也应该算是一种入参校验

    2024-03-26 09:41:22
    赞同 1 展开评论 打赏
滑动查看更多
问答分类:
问答地址:

话题讨论榜

  • 1
    如何让系统具备良好的扩展性?
    奖品池:4000积分,胶囊伞*2,午睡毯*3
    86

    在系统设计之初就融入可扩展性的理念和技术手段,对于确保系统具备良好的扩展能力至关重要。以下是一些关键步骤和策略,可以帮助您实现这一目标: 明确可扩展性需求: 在项目开始之前,深入了解业务需求和预期的增长趋势。 确定哪些部分或功能可能需要频繁扩展或更改。 模块化设计: 将系统拆分为独立的、功能明确的模块或组件。 每个模块应具有明确的边界、接口和依赖关系。 这种设计有助于降低系统复杂性,提高可维...

  • 2
    在JS编程中有哪些常见的编程“套路”或习惯?
    奖品池:4000积分,胶囊伞*2,午睡毯*3
    81

    在JavaScript程序设计领域中,存在许多常用的编程“套路”或模式,这些模式可以帮助我们编写出高效、简洁且易于维护的代码。以下是一些主要的模式: 函数式编程: * 使用纯函数(不改变外部状态或依赖外部状态的函数)。 * 使用高阶函数(接受函数作为参数或返回函数的函数)。 * 使用map、reduce、filter等数组方法,避免使用for循环。 * 使用Promise、async/awa...

  • 3
    你见过哪些独特的代码注释?
    奖品池:4000积分,保温杯*2,运动腰包*4
    44

    在Java编程实践中,除了标准的单行注释(//)、多行注释(/* ... */)和文档注释(/** ... */)之外,还有一些独特的代码注释方式,它们不仅用于解释代码,还能带来一些启发。 1. 幽默和轻松的注释 有些开发者喜欢使用幽默和轻松的注释来增加代码的可读性和趣味性。例如,使用有趣的注释来解释某个复杂或微妙的代码段,或者为代码添加一些个性化的标签。这样的注释虽然不直接解释代码的功能,...

  • 4
    你遇到过哪些触发NPE的代码场景?
    奖品池:4000积分,保温杯*2,运动腰包*4
    45

    空指针异常是一种很常见的运行时异常,一般都是在需要对象的地方使用了null值。避免这类异常的方式比较多,可以从代码习惯、编译工具、测试等方式避免或捕获,以下就进行举例几种策略: 1. 代码审查 手动审查:开发者应定期审查自己的代码,特别注意那些可能返回null的方法调用和字段访问。 使用IDE工具:现代的IDE(如IntelliJ IDEA, Eclipse等)通常提供了代码质量检查工具,这...

  • 5
    作为一个经典架构模式,事件驱动在云时代为什么会再次流行呢?
    奖品池:4000积分,加湿器*2,腰靠垫*5
    140

    事件驱动架构在云时代的流行是由于它能够提供灵活性、弹性和实时性,帮助企业快速适应不断变化的市场和技术环境。

  • 相关电子书

    更多
    低代码开发师(初级)实战教程 立即下载
    冬季实战营第三期:MySQL数据库进阶实战 立即下载
    阿里巴巴DevOps 最佳实践手册 立即下载