Spring annotation@Validated在kotlin类中不起作用,相同的java代码也起作用

Spring annotation@Validated在kotlin类中不起作用,相同的java代码也起作用,java,spring-boot,validation,kotlin,Java,Spring Boot,Validation,Kotlin,我很抱歉让kotlin收到请求。 验证不起作用,可以或多或少地指定星期几验证限制 @RestController @Validated open class GetCrab { @GetMapping("/v1/get") open fun getNameOfDayByNumber(@RequestParam dayOfWeek: @Min(1) @Max(7) Int?): String { return "ok" } } 在相同的java代码中,验证工作正常

我很抱歉让kotlin收到请求。 验证不起作用,可以或多或少地指定星期几验证限制

@RestController
@Validated
open class GetCrab {
    @GetMapping("/v1/get")
open fun getNameOfDayByNumber(@RequestParam dayOfWeek: @Min(1) @Max(7) Int?): String {
        return "ok"
    }
}
在相同的java代码中,验证工作正常

@RestController
@Validated
public class GetCrab {

    @GetMapping("/v1/get")
    public String getNameOfDayByNumber(@RequestParam @Min(1) @Max(7) Integer dayOfWeek) {

        return "ok";
    }
}
验证工作时的Java代码:请求:

答复->

{
"errors": [
    {
        "code": "INTERNAL_SERVER_ERROR",
        "details": "getNameOfDayByNumber.dayOfWeek: must be less than or equal to 7"
    }
]
}

科特林代码,请求

答复:

ok
请对方法也使用“打开”修改器

例如,请尝试以下代码:

@RestController
@Validated
open class GetCrab {
    @GetMapping("/v1/get")
    open fun getNameOfDayByNumber(@RequestParam dayOfWeek: @Min(1) @Max(7) Int?): String {
        return "ok"
    }
}
类和方法都应该在Java术语中是开放的——它们都不应该是最终的。来自链接文章:Spring试图继承您的类,因为有时您可以从@Autowired参数请求精确的类


默认情况下,所有类和方法。但是,Kotlin类/方法,因此您需要在它们之前放置open关键字,以便能够重写。

您可能应该添加一些有关如何调用代码以及如何返回非工作代码的错误/响应的详细信息。好吧,您可能应该说一下如何提供此代码,就像我在Tomcat中运行的一样,当我执行下面这样的GET请求时,我的Java代码工作得很好,但是当我对Kotlin代码执行请求时,我会得到一个类似于X的响应。把它放在问题的某个地方,而不是放在这里的注释中。我正在添加示例请求和响应