RequestParam的春季验证错误

时间:2019-04-24 19:30:51

标签: spring spring-validator

我想将org.springframework.validation.Errors传递给CodeValidator类。
但是,由于我没有使用RequestBody / RequestPart / ModelAttribute,因此无法将Errors放在变量后面的方法param中。

我将@RequestParam用于代码变量,并且我想使用实现org.springframework.validation.Validator的CodeValidator类进行验证。

这是我的代码

@RequestMapping(value = "/check-code", method = RequestMethod.POST)
public ResponseEntity<Object> checkCode(@RequestParam("code") String code, Errors errors) {
    codeValidator.validate(code, errors);
    if(errors.hasErrors()) {
        return ResponseEntity.badRequest().body("Errors");
    }
    return ResponseEntity.ok("");
}

,这是我的代码的错误结果:
An Errors/BindingResult argument is expected to be declared immediately after the model attribute, the @RequestBody or the @RequestPart arguments to which they apply: public org.springframework.http.ResponseEntity com.example.myapp.controller.CodeController.checkCode(java.lang.String,org.springframework.validation.BindingResult)
我该怎么做才能将CodeValidator与@RequestParam一起使用?

已更新: CodeValidator的代码

@Service
public class CodeValidator implements Validator {
    @Override
    public void validate(Object target, Errors errors) {
        String code = ((String) target);

        if(code == null || code.isEmpty()) {            
            errors.rejectValue("code", "", "Please fill in Code.");
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您是否使用验证程序创建了注释? 否则,请查看一个用于使用spring进行自定义验证的小示例/教程:https://www.baeldung.com/spring-mvc-custom-validator

(编辑),如果您使用的是Spring Boot,则可能需要在Spring配置中添加一个MethodValidationPostProcessor bean,以启用@requesParam的自定义验证。