[英]How can I validate entities with spring data r2dbc?
在 Spring 数据 JPA 中,有注释可用于以声明方式为实体设置验证。 它们可以在javax.validation.constraints.*
或org.hibernate.validator.constraints.*
中找到(在插入 Hibernate 的情况下)。
例子:
@NotNull
private String lastName;
但是,如果是 Spring 数据 r2dbc,则开箱即用。
Spring 数据 r2dbc 中的实体是否有任何简单流畅的方法来设置验证? 在我看来,这不应该太困难,因为它可能不需要完整的 ORM 支持,只是在持久化之前检查 object 字段的回调问题。
它与 Bean Validation 和 Hibernate Validation 一起工作得很好。
您可以使用在 JPA 中所做的所有相同注释,因为您是在 DTO 中进行的。
看例子:
@Data
public class UserDto {
private String name;
@NotNull(message = "Last name can not be empty")
private String lastName;
@Min(value = 10, message = "Required min age is 10")
@Max(value = 50, message = "Required max age is 50")
private int age;
}
然后你的 controller 将被注释:
@RestController
@RequestMapping("user")
public class RegistrationController {
@Autowired
private UserService userService;
@PostMapping("register")
public Mono<UserDto> register(@Valid @RequestBody Mono<UserDto> userDtoMono{
return this.userService.registerUser(userDtoMono);
}
}
现在唯一的事情是您必须个性化您的消息,以便它返回您在 DTO 中设置的消息。 要覆盖它,您应该创建一个 ExceptionHandler。
@ControllerAdvice
public class ValidationHandler {
@ExceptionHandler(WebExchangeBindException.class)
public ResponseEntity<List<String>> handleException(WebExchangeBindException e) {
var errors = e.getBindingResult()
.getAllErrors()
.stream()
.map(DefaultMessageSourceResolvable::getDefaultMessage)
.collect(Collectors.toList());
return ResponseEntity.badRequest().body(errors);
}
}
我一直在我的项目中使用它,并从以下位置获得了这个示例: https://www.vinsguru.com/spring-webflux-validation/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.