spring rest @RequestBody 不使用 @Valid 验证
Posted
技术标签:
【中文标题】spring rest @RequestBody 不使用 @Valid 验证【英文标题】:spring rest @RequestBody does not validate with @Valid 【发布时间】: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
时有效!我只在论点和方法上试过这个。您可以将此作为答案发布,以便可以接受和关闭吗?
【参考方案1】:
您需要将@Validated
添加到您的控制器类中。
【讨论】:
这个 idd 解决了这个问题,知道为什么这在 kotlin 中不起作用,只在 java 中起作用吗? 为了让它在 kotlin 中工作,我还需要将 spring 插件添加到 kotlin maven 插件中,如下所示:***.com/questions/52345291/…以上是关于spring rest @RequestBody 不使用 @Valid 验证的主要内容,如果未能解决你的问题,请参考以下文章
spring rest @RequestBody 不使用 @Valid 验证
不支持 Spring Rest POST Json RequestBody 内容类型
如何在 Spring Boot REST API 中启用对 JSON / Jackson @RequestBody 的严格验证?