关于java代码的参数校验

 每次项目组代码评审的时候,都会因为这个问题跟大家争论一会儿,自己总结了自己的想法如下:
1,首先要弄清楚参数校验需要校验的是哪些参数。我觉得参数校验仅仅需要校验外来用户输入给我们系统的参数。比如做为车载后装来说,车机给我们的参数,这样的参数校验越严格越好。比如做为金梅华的项目来说,服务器端的校验时不可省略的,页面端的校验不能替代服务器端的校验,即使页面端也是我们自己开发的。
2,要弄清楚为什么要做参数校验。我觉得参数校验的目的有三个:1,安全性的考虑,防止恶意用户输入恶意代码。比如恶意的sql语句有可能把整个数据库down掉。2,性能上的考虑,如果参数校验出错的话,可以立刻给出具体的提示消息,而不是一堆无意义的结果,可加改善用户体验。3,还有一种情况,如果用户没有输入值,或输入错误值的话,我们可以给出默认值,这可以增加程序的强壮性。
3,没有必要的参数校验。我觉得在我们自己工程的内部,参数校验时可以省略的,甚至是必须省略的。比如,我写了一个方法,需要输入五个参数,这个方法是给杨艳用的。这个时候,没有必要对这五个参数进行校验。因为如果参数没有校验的话,杨艳调用我的方法抛出空指针异常,或者其他类型的异常 这说明杨艳的程序逻辑有问题,这样的错误应该在代码调试阶段避免。这样的问题发现的越早越好。如果我们做了过度的参数校验的话,反而有可能增加代码调试阶段的难度。
4,参数校验不能做什么。无论多么严格的参数校验都不可能避免同事的代码错误(异常的处理也是同样)。
5,不能做参数校验的场合,破坏参数完整性的场合。如果我需要得到同事(而不是用户)的四个参数,那么这四个参数必须同时存在,不能说同事给我输入了三个参数和一个null值,我的程序还能继续执行。这样的执行没有任何意义,而且会把代码逻辑错误掩盖。
6,我觉得我们现在参数校验的目的很多都是源于“自己脆弱的心灵”。那就是不愿意让自己的代码在被别人调用的时候,抛出一大堆异常。因为那样会让我们心情变得糟糕。但是调试阶段发现的问题越多,我们程序强壮性就会越好。因此,我们应该让自己变得坚强。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
方法参数校验是一种保证代码正确性和安全性的重要手段,可以有效避免不必要的错误和漏洞。在 Java 中,可以使用一些开源的参数校验框架来实现方法参数校验,如: 1. Hibernate Validator:是一个基于 JSR 380 标准的参数校验框架,支持常用的校验注解,如@NotNull、@Size、@Email、@Pattern 等,可以通过在方法参数上添加注解来进行参数校验。 2. Apache Commons Validator:是一个 Apache 组织开源的校验框架,支持多种校验器,如 EmailValidator、CreditCardValidator、DateValidator 等,可以通过在方法中调用相应的校验器来进行参数校验。 3. Spring Validation:是 Spring 框架中的参数校验框架,支持 JSR 380 标准的注解,并且提供了一些扩展注解,如@NotBlank、@Range、@Valid 等,可以通过在方法参数上添加注解来进行参数校验。 以上三种参数校验框架都是比较常用的,可以根据自己的需求选择使用。在实际开发中,为了保证代码的可读性和可维护性,通常建议将参数校验的逻辑封装在一个单独的方法中,如: ``` public void doSomething(String param1, int param2) { checkParam1(param1); checkParam2(param2); // do something with param1 and param2 } private void checkParam1(String param1) { if (param1 == null || param1.isEmpty()) { throw new IllegalArgumentException("param1 is required"); } // other checks if necessary } private void checkParam2(int param2) { if (param2 < 0) { throw new IllegalArgumentException("param2 must be positive"); } // other checks if necessary } ``` 这样可以将参数校验和业务逻辑分离,使代码更加清晰明了。同时,也可以通过单元测试来验证参数校验的正确性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值