Spring Rest @RequestBody 不使用 @Valid 进行验证

NDM*_*NDM 1 java spring-boot spring-rest

我正在学习 java 和 spring boot,我正在尝试验证从 json 绑定的控制器参数。

我有一个简单的实体:

@Getter
@Setter
class Resource {
    @NotBlank
    String uri;
}
Run Code Online (Sandbox Code Playgroud)

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

@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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

geo*_*eze 5

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