java - 如何使用 javax 验证来验证 java 普通方法
问题描述
我正在使用spring-boot-starter-validation
.
控制器上的验证工作正常,
我想知道我们是否可以使用@Valid 注解来验证一个类的普通方法?我已经尝试过了,但没有工作。
我在控制器上的工作解决方案
@PostMapping("/testMessage")
ResponseEntity<String> testMethod(@Valid @RequestBody InternalMsg internalMsg) {
return ResponseEntity.ok("Valid Message");
}
我想将验证移至类方法,以便当我点击 RestAPI 时,验证错误会在新方法中捕获。
假设该方法是MsgValidator类的validateMsg,我在控制器代码中调用此方法
@PostMapping("/testMessage")
ResponseEntity<String> testMethod(@RequestBody InternalMsg internalMsg) { // No @Valid here
MsgValidator msgValidator = new MsgValidator();
Boolean isValid = msgValidator.validateMsg(internalMsg);
// some other processings
return ResponseEntity.ok("Valid Message");
}
public class MsgValidator{
public boolean validateMsg(@Valid InteropMsg interopMsg){
return true;
}
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Ack> handleValidationExceptions(MethodArgumentNotValidException ex) {
StringBuilder errorMessages = new StringBuilder("");
ex.getBindingResult().getAllErrors().forEach((error) -> {
errorMessages.append(error.getDefaultMessage()).append(";");
});
log.error("Validation errors : "+errorMessages.toString());
return ResponseEntity.ok().body(ack);
}
}
public class InternalMsg implements Serializable {
@NotNull(message = "Msg Num is a required field")
private String msgNumber;
@NotNull(message = "Activity Name is a required field")
private String activityName;
}
这不起作用请让我知道如何实现这一点
解决方案
下面是一个示例,说明如何使用ValidatorFactory
来获取 aValidator
来进行验证,而不是使用@Valid
注释。
InternalMsg internalMsg = new InternalMsg();
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<InternalMsg>> validate = validator.validate(internalMsg);
有关更多详细信息,请参见此处-> https://www.baeldung.com/javax-validation
以下只是一个片段,不一定是推荐的使用方式ValidationFactory
推荐阅读
- kubernetes - Kubernetes Pod 状态始终处于挂起状态
- drupal - 使用 civicrm 匿名注册会员时访问被拒绝
- github - 带有 github v4 graphql 端点的 OAuth2 密钥/秘密
- c# - 我怎样才能持有一个弱引用
到实例的方法,直到实例被收集? - swift - 设置scnnode展示位置
- php - htaccess 文件将 /stringa 重定向到 /index.php?action=stringb
- javascript - 如何使用 id 获取多个复选框值
- python - 如何在张量流中实现随机池化,在每个滑动窗口中获取随机像素
- python-3.x - 获取列表中的一组数字,其总和与给定的所需数字匹配
- python - 插值标准函数 python, func(10,16,2) -> [10 12 14 16]