kotlin和@Valid Spring批注


问题内容

我有一个实体:

class SomeInfo(
        @NotNull @Pattern(regexp = Constraints.EMAIL_REGEX) var value: String) {
    var id: Long? = null
}

和控制器方法:

@RequestMapping(value = "/some-info", method = RequestMethod.POST)
public Id create(@Valid @RequestBody SomeInfo someInfo) {
       ...
    }

@Valid 注释不起作用。

看来Spring需要一个默认的无参数构造函数,并且上面的花哨代码变得有些丑陋(但可以正常工作),如下所示:

class SomeInfo() {

    constructor(value: String) {
            this.value = value
        }

        @NotNull @Pattern(regexp = Constraints.EMAIL_REGEX) 
        lateinit var value: String

        var id: Long? = null
    }

有什么好的做法可以减少罗y吗?

谢谢。


问题答案:

似乎Spring需要将这些注释应用于字段。但是Kotlin会将这些注释应用于构造函数参数。field:在应用注释以使其应用于字段时,请使用说明符。以下代码适合您。

class SomeInfo(
    @field:NotNull
    @field:Pattern(regexp = Constraints.EMAIL_REGEX)
    var value: String
) {
    var id: Long? = null
}