【发布时间】:2021-07-29 17:42:21
【问题描述】:
我正在使用 spring-boot-starter-validation 验证 java bean。
控制器上的验证工作正常,
我想知道我们是否可以使用@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;
}
这不起作用 请告诉我如何实现这一目标
【问题讨论】:
-
我也在这里找到了与此相关的东西 - stackoverflow.com/questions/37827371/… 但它是@Validated
标签: java spring spring-boot spring-boot-starter