0

我有 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 代码:请求:

http://localhost:12722/v1/get?dayOfWeek=100

响应->

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

}

Kotlin 代码,请求http://localhost:12722/v1/get?dayOfWeek=100

回复:

ok
4

1 回答 1

1

open也为方法使用修饰符。

例如,请尝试代码:

@RestController
@Validated
open class GetCrab {
    @GetMapping("/v1/get")
    open fun getNameOfDayByNumber(@RequestParam dayOfWeek: @Min(1) @Max(7) Int?): String {
        return "ok"
    }
}

由于 Spring 代理逻辑,类和方法都应该是open(用 Java 术语 - 它们都不应该是最终的)。来自链接的文章:Spring 尝试继承您的类,因为有时您可以从 @Autowired 参数请求准确的类。

默认情况下,Java 中的所有类和方法都不是 final 的。然而 Kotlin 类/方法默认是 final 的,所以你需要open在它们之前加上关键字才能覆盖。

于 2020-01-08T15:39:13.653 回答