spring rest @RequestBody 未使用@Valid 进行验证

spring rest @RequestBody does not validate with @Valid

我正在学习 java 和 spring 引导,我正在尝试验证从 json.

绑定的控制器参数

我有简单的实体:

@Getter
@Setter
class Resource {
    @NotBlank
    String uri;
}

我想通过以下控制器持久化:

@BasePathAwareController
public class JavaResourcePostController {

    private final ResourceRepository repository;

    public JavaResourcePostController(ResourceRepository repository) {
        this.repository = repository;
    }

    @RequestMapping(value = "/resources", method = RequestMethod.POST)
    ResponseEntity<Resource> create(
        @Valid @RequestBody Resource resource
    ) {
        repository.save(resource);

        return ResponseEntity.ok(resource);
    }
}

我的理解是进入方法时资源参数应该是有效的。但是发布一个空的 uri 字段不会触发该方法的验证。但是它确实在 repository.save()

的休眠验证中被触发

为什么参数上的 @Valid 注释不能确保我得到经过验证的实体?

您需要将 @Validated 添加到您的控制器 class。