最近在写QQ登录的接口,但是发现Validation死活不生效!于是开始了漫长的排查过程...
Springboot版本:2.6.13
已经添加依赖
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
请求封装类
import com.gitlab.nykbapi.model.QQUserDataCache
import javax.validation.constraints.NotNull
data class LoginByQQRequest(
@NotNull(message = "openid不能为空")
var openid: String? = null,
@NotNull(message = "qqUserDataCache不能为空")
var qqUserDataCache: QQUserDataCache? = null
)
接口方法
fun loginBYQQ(@Validated @RequestBody request: LoginByQQRequest): NykbResult {
return userService.login(request).success
}
按理说这样子配置已经是没毛病了,但它就是不会走验证,而是直接报错缺少参数!最后经过歪打正着,发现是Kotlin特有的data数据类在捣鬼!
将请求封装类改成标准class后,就能看到熟悉的MethodArgumentNotValidException异常了!
import com.gitlab.nykbapi.model.QQUserDataCache
import javax.validation.constraints.NotNull
class LoginByQQRequest{
@NotNull(message = "openid不能为空")
var openid: String? = null
@NotNull(message = "qqUserDataCache不能为空")
var qqUserDataCache: QQUserDataCache? = null
}
看来,尽管2024年都快要到了,但Kotlin仍然还有很多东西是不适用于后端开发,Kotlin任重道远。
问题解决,特此记录