我在使用驗證@RequestBody 的專案中遇到問題
implementation("org.springframework.boot:spring-boot-starter-validation")
我的 DTO 如下所示:
import javax.validation.constraints.Email
import javax.validation.constraints.Pattern
class LoginDto(
@Email
val email: String,
@Pattern(regexp = Constants.PASSWORD_REGEX)
val password: String
)
控制器看起來像這樣:
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.RestController
import javax.validation.Valid
@RestController
@Validated
class AuthController(private val authService: AuthService) {
@PostMapping("login")
fun login(@Valid @RequestBody loginDto: LoginDto): LoginResponse {
return authService.login(loginDto)
}
...
}
如果我嘗試傳遞無效資料,驗證沒有錯誤:
{
"password":"hello",
"email":"dfdfdfdf"
}
我沒有收到任何錯誤我使用 Exposed 而不是 jpa 但我認為它與問題無關
uj5u.com熱心網友回復:
例如,您應該將和的注釋更改為@email和。@Pattern@field:Email@field:Pattern
這樣做的原因是雙重的,一方面您將注釋放在 Kotlin 屬性上,而 Kotlin 屬性可以通過多種方式訪問??。因此,您需要指定要如何訪問屬性以應用注釋。另一方面,注釋具有一組預定義的目標。例如,您可以檢查注釋以查看它是否具有欄位目標。這就是我們可以使用@field:Patternand的原因@field:Email。
這是與 java 的一個關鍵區別,其中您有不同的 getter、setter 和欄位。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/484792.html
