使用的环境
- kotlin 1.5.31
- IDEA: 2021.2.3
事情经过
我使用javax.validation.constraints.*
的注解作用到一个kotlin的data class上,测试接口的时候并没有按照正常的注解规则来,代码如下:
data class RedirectParam(
var cycle: Int? = 0,
@URL
var to: String
) : HttpToolParams
我传入的RedirectParam#to
是一个 xxx://XXX 按照@URL的规则应该会抛出一个BindException,结果并没有。
解决方法
使用IDEA自带的反编译工具发现编译的代码只写到了构造器参数上,而不是属性上,因此注解加上@field:
就可以正常执行
data class RedirectParam(
var cycle: Int? = 0,
@field:URL
var to: String
) : HttpToolParams
小记
data class 构造器上标记的注解默认只会标记到构造器参数上, 更高版本似乎是生成了一个静态方法,注解放到了那个静态方法上,正常的java框架无法正常获取注解,必须加上field
前缀或给get()
加