[英]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.