Spring验证-如何在我的Contoller中检索errors.rejectValue?

Hop*_*ing 4 java validation spring spring-data spring-boot

我的TestValidator中有我的validate方法,如下所示

@Override
public void validate(Object target, Errors errors) {
    Test test = (Test) target;
    String testTitle = test.getTestTitle();

    //**ErrorCheck1** - This works, and I am able to pull the value in my controller
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "testTitle", "test.testTitle.projec", "My msg");


    if (testTitle != null && testTitle.length() < 4) {
        logger.error("Inside custom validation"+test.testTitle().length());

        //**Error Check2**
        //***HOW DO I RETRIEVE THE BELOW VALUE in My controller
        errors.rejectValue(testTitle, "test.testTitle.lessThen4");
        errors.addAllErrors(errors);
        logger.error("Entered If condition of validate");
    }
}
Run Code Online (Sandbox Code Playgroud)

我的控制器是

@RequestMapping(value = "/test", method = RequestMethod.PUT)
public ResponseEntity<BasicResponseDTO> newTest(@Valid  @RequestBody Test test, BindingResult result) {

    if (result.hasErrors()){
        logger.error("Entered Errors");
        BasicResponseDTO basicResponseDTO = new BasicResponseDTO();
        basicResponseDTO.setCode(ResponseCode.BAD_REQUEST);
        return new ResponseEntity<BasicResponseDTO>(basicResponseDTO, HttpStatus.BAD_REQUEST);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我的ErrorCheck1条件被激活时,控制器内部的IF条件能够对其进行检索。但是,在我的ErrorCheck2中,由于error.rejectValue的原因,我立即在控制台上收到一个错误,并且当testTitle长度小于4时,无法正常处理这种情况。

什么是errors.rejectValue的替代方法,以便我可以处理控制器中的错误?

Hop*_*ing 5

好的,我知道了。我要做的就是改变

errors.rejectValue(testTitle,“ test.testTitle.lessThen4”);

errors.reject(testTitle,“ test.testTitle.lessThen4”);

RejectValue是字段错误,本质上不是全局的。拒绝是全局错误,可以从控制器的错误列表内部进行访问。

从文档中

void reject(String errorCode,String defaultMessage);
使用给定的错误描述为整个目标对象注册一个全局错误。

@Override
public void validate(Object target, Errors errors) {
Test test = (Test) target;
String testTitle = test.getTestTitle();

//**ErrorCheck1** - This works, and I am able to pull the value in my controller
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "testTitle", "test.testTitle.projec", "My msg");


if (testTitle != null && testTitle.length() < 4) {
    logger.error("Inside custom validation"+test.testTitle().length());

    //**Error Check2**
    //***HOW DO I RETRIEVE THE BELOW VALUE in My controller
    errors.reject(testTitle, "test.testTitle.lessThen4");
    errors.addAllErrors(errors);
    logger.error("Entered If condition of validate");
   }
}
Run Code Online (Sandbox Code Playgroud)

希望能对某人有所帮助。