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
注释而不是使用更多验证注释。
我一直在寻找最简单和最好的方法来验证我的实体,然后再 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
注释而不是使用更多验证注释。