首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

谁来检查方法参数合法性

我们在编程中的函数或者是方法,大多数都是有参数的。参数对于方法来说是很重要的输入数据,传入的参数值的合法性影响着方法的稳定性,严重时甚至可能导致崩溃问题的出现。...book.getPrice()); } } 就这个案例而言,两者都可以,但是有没有什么规范呢 其实还是有一些约定的 如果方法是public,protected等这样被外部可调用的时候,方法定义时需要进行值的合法性检验...,因为无法确保外部始终传递合法的参数值。...null) { System.out.println(book.getPrice()); } } 我们通过增加@param book could be null就可以告诉调用者,不用做合法性检查...此外我们也可以使用@Nullable或者@NonNull来表明当前参数的检查职责归属。 至此我们也理清了检查方法参数合法性的责任归属,欢迎评论交流。

98120
您找到你想要的搜索结果了吗?
是的
没有找到

你如何检查参数合法性

跟一般的合法性检查不同,断言失败的时候抛出AssertError;跟一般的合法性检查不同,除非你启用他们否则断言对你没有任何影响和消耗。...在java命令行启用指令: -ea 或者 -enableassertions 更多断言的信息,查看java手册的Asserts; 检查参数合法性非常重要,即使你的方法中没有用到,但是存储起来了,后面会用到...构造函数代表了一个特殊例子的原则:你应该检查即将存储稍后会用到的参数合法性。 检查构造函数参数合法性非常重要,它可以防止构造一个违反类的不变性的对象。...异常情况 在执行方法计算之前,你应该检查方法参数 。这个规则也有异常情况。 一个重要的异常情况是:合法性检查代价非常高并且重要, 并且检查是在执行计算的过程中执行的。...换句话说,计算常常会抛出参数合法性检查的异常,并不会匹配方法在文档中申明的异常。这种场景下,你应该使用异常翻译成语。转换自然异常为正确的异常。

1.2K10

SpringBoot注解验证参数

SpringBoot注解验证参数 废话不多说,直接上表格说明: 注解 作用类型 解释 @NotNull 任何类型 属性不能为null @NotEmpty 集合 集合不能为null,且size大于0 @NotBlanck...时间、日期 必须是一个过去的时间或日期 @Future 时期、时间 必须是一个未来的时间或日期 @Email 字符串 必须是一个邮箱格式 @Pattern 字符串、字符 正则匹配字符串 以上注解用到要验证参数的封装类中的属性上...= Result.class) public Result test(@ApiParam(name = "test", value = "参数", required = true) @Validated...getDefaultMessage(); return Result.error(errorMsg); } return Result.ok("参数验证通过..."); } 这样使用注解来验证参数就很方便了,不用再写代码去验证入参了 但是有一个问题,@Pattern注解中的正则只能写死到注解里面,没法提取出来,现在还不知道怎么解决 希望知道解决方法的大佬评论解答一下

1.1K20

PhalGo-参数验证过滤

PhalGo-参数验证过滤 phalGo 的参数过滤使用 beego 提供的独立模块 validation 进行封装改造 , 从而达到可以和 request 一同使用的效果 , 通过统一的报错机制对不匹配的参数进行处理...连贯操作 当我们自己进行参数验证时,我们需要先获取参数,在判断参数是否存在,判断长度是否在制定范围内,在判断是否符合我们所需要的格式,尤其在Go语言需要花费大量的代码量来实现这一系列功能,但是在PhalGo...").GetString() 一个连贯操作就对一个参数进行很好的描述,而不用和传统的写法一样消耗大量的代码量在参数获取验证上面 使用方法 PhalGo的参数验证是和Request紧密结合在一起的大致格式如下...: Request.Param(参数名称).你需要的验证规则.Get参数类型 这样就可以获取一个被验证过的参数 报错机制 当我们参数验证不通过是需要处理的,当我们对所有参数定义完成之后,我们只需要重写一下一个...= nil { return Response.RetError(err, -1) } 注意:此处默认会返回首个验证失败的参数报错,当有多个验证失败也只返回首个 支持参数验证类型 PhalGo的参数验证支持大部分验证规则

58860

springboot之前端参数验证

springboot 参数验证 JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Validator。...JSR 303 用于对 Java Bean 中的字段的值进行验证。 主要是 javax.validation 包下面的注解,用于进行参数验证。...Email,可以通过正则表达式和flag指定自定义的email格式 | | @Pattern(value) | 限制必须符合指定的正则表达式 | 参数验证具体使用 1 创建需要验证的实体类 /**...如果在接口上面加上了BindingResult 这个参数的话,验证后的错误信息不会抛出来,会被封装到这个类当中。 如果需要获取到验证的错误信息,需要从这个类手动当中获取。...,通常实际情况下都是通过切面的方式,获取BindingResult 参数的数据,如果有验证错误信息,就返回给前端参数相关的错误的信息 /** * @author 海加尔金鹰 */ @Aspect @

1K20

绕过接口参数签名验证

在一些关键业务接口,系统通常会对请求参数进行签名验证,一旦篡改参数服务端就会提示签名校验失败。在黑盒渗透过程中,如果没办法绕过签名校验,那么就无法进一步深入。...微信小程序的前端代码很容易被反编译,一旦签名加密算法和密钥暴漏,找到参数的排序规则,那么就可以篡改任意数据并根据算法伪造签名。下面我们将通过两个简单的小程序参数签名绕过的案例,来理解签名逆向的过程。...因调用API时对请求参数进行签名验证,服务器会对该请求参数进行验证是否合法,所以当我们尝试去篡改游戏成绩的时候,就会提示签名异常。那么,该如何破局呢?...最常见的是根据参数名称将所有请求参数按ASCII码排序,而在这里我们很容易地就可以从前端代码里获取到参数顺序。...(3)基于jsrsasign的rsa签名验签,尝试篡改请求参数,构建签名计算Sign值。 构建http数据包,成功伪造签名篡改游戏成绩。

1.2K30

接口参数注解验证案例

写作缘由 写接口的时候经常会有请求体里某字段不为null的需求;也有使用一个dto对象,但是插入和修改都想使用这个dto,那这样的话判断条件就不一样,因为修改操作必须有ID,所以参数验证还是挺麻烦的...源码下载 ChaiRongD/Demooo - Gitee.com 注意依赖和注解到底是引用的哪个包 请求参数验证 请求参数不为null 首先定义一个dto package com.example.springbootparamvalidatedemo.dto...比如经常会有添加和修改某类的需求,其实请求里就是一个字段ID是否需要验证,其实这里是可以复用的,如果我能告诉系统 这个是插入操作,不需要验证ID,这个是修改操作,必须要验证ID,那就爽歪歪了,不过确实有这种骚操作...= {BaseConstant.Update.class, BaseConstant.Insert.class}) private String email; } 下面定义的是接口,其中注意接口的参数前面的注解...@RequestBody TeacherDto teacherDto) { return teacherDto; } 但是也有一种情况,就是下面这中,我不指定Validated注解里的参数

14410

Springboot之分组验证以及自定义参数验证

学习完简单的验证之后发现基本能满足百分之80的验证需求,接下来深入学习下验证。 分组验证 分组验证需要使用到@Validated 这个注解,是spring基于@Valid注解新增的功能。...所以基本上在controller层接收参数的时候,可以用@Validated注解替换@Valid。不过@Validated注解不能放在类中的字段上面,而@Valid注解可以放在类中的字段上面。...所以如果类中的某个字段不是基础类型,但是里面的参数需要校验的话,需要在字段上面加上@Valid 代码如下: /** * @author 海加尔金鹰 */ @Data public class TestVo...TestVo ,不加上无法进行验证 分组验证:例如同一个参数,在新增的时候,id不传 但是在修改的时候必传。...这个时候可以利用group来指定验证的规则组 创建两个不同的验证组: 关于是否继承默认验证组,建议都继承,如果不继承,在验证的时候只会验证指定的字段 /** * @author 海加尔金鹰

1.4K10

Laravel 参数验证的疑与惑

Laravel本身提供了很多通用的参数验证规则,但是对于一些特定的场景,还是需要提供验证规则的扩展。...1 通过extend方法扩展 //这是一个简单的参数比较的验证规则,Laravel5.8中提供,Laravel5.5中未提供 //验证规则如下: 'max_num'=>'gte:min', Validator...验证器在验证参数的过程中,如果找到匹配的验证规则,则直接进行验证。否则调用魔术方法__call查找扩展验证函数。扩展函数返回布尔值,返回true则表示验证通过,返回false表示验证失败。...* * @return string */ public function message(); } 自定义规则类需要实现的方法有passes方法,用于验证参数是否合法...例如,一个验证规则如下,表示用当期类的validateMinNum对参数进行验证,那么,这样的一个功能,如何在Laravel中实现呢。

3.3K00

SpringBoot 参数验证之 @Validated 和 @Valid

0x01:Spring Validation 验证框架 Spring Validation 验证框架对参数验证机制提供了@Validated (Spring's JSR-303 规范,是标准 JSR...-303 的一个变种),javax 提供了@Valid(标准 JSR-303 规范),配合 BindingResult 可以直接提供参数验证结果。...但是在分组、注解地方、嵌套验证等功能上两个有所不同: @Validated 分组:提供分组功能,可在入参验证时,根据不同的分组采用不同的验证机制。 可注解位置 :可以用在类型、方法和方法参数上。...@Valid 分组:无分组功能 可注解位置:可以用在方法、构造函数、方法参数和成员属性上(两者是否能用于成员属性上直接影响能否提供嵌套验证的功能) 嵌套验证:用在方法入参上无法单独提供嵌套验证功能;能够用在成员属性上...请求参数 ?

1.8K20
领券