首页 > 解决方案 > 如何使用 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;
}

这不起作用请让我知道如何实现这一点

标签: javaspringspring-bootspring-boot-starter

解决方案


下面是一个示例,说明如何使用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


推荐阅读