我在使用验证@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)
    }
    ...
}

如果我try 传递无效数据,验证不会出错:

{
    "password":"hello",
    "email":"dfdfdfdf"
}

我没有发现错误

推荐答案

例如,您应该将注释@email@Pattern更改为@field:Email@field:Pattern.

这样做的原因有两个,一方面,您可以将注释放置在Kotlin属性上,并且可以通过多种方式访问Kotlin属性.因此,您需要指定如何访问要在其上应用注释的属性.另一方面,注释有一组预定义的目标.例如,您可以判断注释以查看它是否具有字段的目标.这就是为什么我们可以使用@field:Pattern@field:Email.

这是java的一个关键区别,java中有不同的getter、setter和field.

Kotlin相关问答推荐

创建具有共同父类型的两种不同类型对象的列表的最有效方法是什么?

在Kotlin中将String转换为T

为什么在jacksonObjectMapper上将DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES设置为false无效?

在 detekt 配置文件中找不到某些属性

可组合项在返回后返回时组合导航句柄

为什么多线程不会使执行更快

使用空键映射获取

从带有 Room 和 Flows 的 SQLite 表中获取祖先树

Kotlin:查找集合中最常见的元素

内联函数导致单元测试代码覆盖率报告出错

Android 在将 androidx 生物识别更新为 1.0.0-alpha04 后崩溃

`this@classname` 在 Kotlin 中是什么意思?

无法解决:androidx.lifecycle:lifecycle-viewmodel-ktx:1.1.1

Kotlin:什么是 kotlin.String!类型

Android 与 Kotlin - 如何使用 HttpUrlConnection

Android 上的 Kotlin:将map到list

Kotlin:具有多个不同类型设置器的单个属性

使用 rxbinding 时我应该取消订阅吗?

@StringRes、@DrawableRes、@LayoutRes等android注释使用kotlin参数进行判断

比较Kotlin的NaN