繁体   English   中英

Spring MVC使用@RequestBody验证原语不起作用

[英]Spring mvc validate a primitive with @RequestBody doesn't work

我正在尝试验证从发帖请求正文收到的电子邮件,但是它不起作用!

@RequestMapping(value = "myservice/emails", method = RequestMethod.POST)
public String requestFoo(@RequestBody @Email String email) {
    return email;
}

当我发送不符合电子邮件正则表达式的字符串的请求时,将执行该功能,并且收到200状态代码。

即使我添加@Valid批注,结果也始终相同。

@RequestMapping(value = "myservice/emails", method = RequestMethod.POST)
public String testValidation(@Valid @RequestBody @Email String email) {
    return email;
}

从Spring 3.2开始,@ @RequestBody方法的参数后面可能带有Errors对象,因此允许在同一@RequestMapping处理验证错误:

@RequestMapping(value = "myservice/emails", method = RequestMethod.POST)
public ResponseEntity<String> testValidation(@Valid @RequestBody @Email String email, Errors errors) {
  if (errors.hasErrors()) {
  return ResponseEntity.badRequest().body(ValidationErrorBuilder.fromBindingErrors(errors));
        }
    return email;
}

并创建一个自定义验证器:

public class ValidationErrorBuilder {

    public static ValidationError fromBindingErrors(Errors errors) {
        ValidationError error = new ValidationError("Validation failed. " + errors.getErrorCount() + " error(s)");
        for (ObjectError objectError : errors.getAllErrors()) {
            error.addValidationError(objectError.getDefaultMessage());
        }
        return error;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM