Spring Data Rest - 保存前验证 Bean

Spring Data Rest - validate Bean before save

我一直在寻找最简单和最好的方法来验证我的实体,然后再 created/updated 并且在大量谷歌搜索之后,我找不到 clean/modern 一个。

理想情况下,我希望能够按如下方式使用@Valid:

import javax.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.rest.core.annotation.HandleBeforeCreate;
import org.springframework.data.rest.core.annotation.HandleBeforeSave;
import org.springframework.data.rest.core.annotation.RepositoryEventHandler;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

@Slf4j
@Validated
@Component
@RepositoryEventHandler
public class CustomerEventHandler {

  // Triggered for POST
  @HandleBeforeCreate
  public void onBeforeCreate(@Valid Customer entity) {
    log.info("Saving new entity {}", entity);
  }

  // Triggered for PUT / PATCH
  @HandleBeforeSave
  public void onBeforeSave(@Valid Customer entity) {
    log.info("Saving new entity {}", entity);
  }

}

客户实体是:

import javax.validation.constraints.NotBlank;

@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "customer")
public class Customer {
  @NotBlank
  private String firstname;
}

但是好像不行

在 Spring Data REST 中验证实体的现代、简单的方法是什么?

注意:我正在使用 Spring 启动

我在链接的 GitHub 项目中检查了您的 pom.xml。您只依赖于验证注释,但使用 Spring Boot 的正确方法是使用 spring-boot-starter-validation 依赖项。 Spring Boot Starter Dependencies 为您的项目添加了“魔力”,它会根据您的注释自动触发验证。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

我的德语博客写了一篇关于这个主题的文章:
https://agile-coding.blogspot.com/2020/11/validation-with-spring.html

我想推荐一些最佳实践,每个 junior/beginner 的开发人员都应该知道。不要在实体中放置任何验证注释,在 DTO/Resource classes 中使用它们。练习验证的最佳方法是您可以在自己的 Spring 异常处理程序启动 class 中处理 MethodArgumentNotValidation 异常,注释 class @RestControllerAdvice 并创建您的拥有 @interface 注释而不是使用更多验证注释。