作者github主頁原文
DTO
package dawsonlee1790.springboot_validation_kotlin_demo.dto
import javax.validation.constraints.Max
import javax.validation.constraints.Pattern
/**
* @author dawsonlee1790
* @email dawsonlee1790@gamil.com
* @date 2018-12-26
*/
data class LoginDTO(
@field:Pattern(regexp = "[a-zA-Z0-9]+", message = "姓名只能由數字和大小寫字母組成")
val name: String,
@get:Max(18, message = "居然超過18歲了,可怕,不允許")
val age: Int
)
/*
//============springboot validation 不生效============
data class LoginDTO(
@Pattern(regexp = "[a-zA-Z0-9]+", message = "姓名只能由數字和大小寫字母組成")
val name: String,
@Max(18, message = "居然超過18歲了,可怕,不允許")
val age: Int
)
*/
controller
package dawsonlee1790.springboot_validation_kotlin_demo.controller
import dawsonlee1790.springboot_validation_kotlin_demo.dto.LoginDTO
import org.springframework.validation.annotation.Validated
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
/**
* @author dawsonlee1790
* @email dawsonlee1790@gamil.com
* @date 2018-12-26
*/
@RestController
@RequestMapping("/loginController")
class LoginController {
@PostMapping("/login")
fun login(@RequestBody @Validated loginDTO: LoginDTO) {
println("Hello ${loginDTO.name}!")
}
}
原因分析
- 在 java 中,將 validation 注解到實體類屬性或者 get/set 方法上,但是在 kotlin 中,屬性直接寫在構造函數中,validation 注解并沒有作用到屬性上。
解決方案
- 使用
@field: 標識符,field標識符只允許在屬性的訪問器函數內使用。它能夠 validation 校驗注解作用與屬性。
- 使用
@get: 標識符,表示注解用在屬性getter的方法上
項目源碼
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。