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。
我正在学习 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。