【问题标题】:spring rest @RequestBody does not validate with @Validspring rest @RequestBody 不使用 @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 注释不能确保我得到一个经过验证的实体?

【问题讨论】:

标签: java spring-boot spring-rest


【解决方案1】:

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

【讨论】:

  • 这个 idd 解决了这个问题,知道为什么这在 kotlin 中不起作用,只在 java 中起作用吗?
  • 为了让它在 kotlin 中工作,我还需要将 spring 插件添加到 kotlin maven 插件中,如下所示:stackoverflow.com/questions/52345291/…
猜你喜欢
  • 2022-01-01
  • 2021-12-09
  • 2018-03-14
  • 2021-12-31
  • 2017-10-18
  • 1970-01-01
  • 2020-10-04
  • 2021-02-07
相关资源
最近更新 更多