@Pattern 不适用于具有路径变量的控制器方法

Bag*_*rma 3 spring spring-boot

我创建了一个带有更新 (PUT) 请求的控制器,并在 id 字段上应用了正则表达式,如下所示,但该模式未执行并返回 SUCCESS 而不是 BAD_REQUEST。

@PutMapping("users/{id}")
public Mono<ResponseEntity<UsersApiDTO>> update(@PathVariable @Pattern(regexp = "^[A-Za-z]{1,20}$") String id, @RequestBody @Valid UsersApiDTO usersApiDTO) {
    // return response
}
Run Code Online (Sandbox Code Playgroud)

当我传递错误的“id”路径字段值“T001223242345”时,它正在工作。它应该给我 BAD_REQUEST,因为它适用于请求正文,就像我为正文参数传递任何无效值一样,它会给出 BAD_REQUEST。

我浏览了很多链接和博客,但还没有运气。

Gre*_*ski 6

您需要将@Validated 注释添加到您的RestController路径变量中才能得到验证:

@Validated
@RestController
public class YourController {
    [...]
Run Code Online (Sandbox Code Playgroud)

我还建议查看Validating RequestParams and PathVariables in Spring