【发布时间】:2022-01-17 06:35:40
【问题描述】:
我正在学习 java 和 spring boot,我正在尝试验证从 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添加到您的控制器。 docs.spring.io/spring-framework/docs/current/javadoc-api/org/… -
当我在班级级别 idd 上注释
@Validated时有效!我只在论点和方法上试过这个。您可以将此作为答案发布,以便可以接受和关闭吗?
标签: java spring-boot spring-rest