【发布时间】:2016-01-19 08:06:30
【问题描述】:
我们正在尝试使用 spring 对请求进行输入验证。我们遵循了本教程:http://spring.io/guides/gs/validating-form-input/,但它似乎不起作用。看起来@NotNull 和/或@Valid 由于某种原因被忽略了。
例如,我们有以下控制器:
@RequestMapping(value = "/test", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(value = HttpStatus.OK)
@ResponseBody
public void test(@RequestBody @Valid TestDTO testDTO, BindingResult result) {
this.validateDTO(result);
}
protected void validateDTO(BindingResult result) {
if (result.hasErrors()) {
List<FieldError> fieldErrors = result.getFieldErrors();
throw new FieldValidationException(fieldErrors);
}
}
TestDTO 是以下类:
public class TestDTO {
@NotNull
private String test;
...
}
所以我们期望,当发布一个没有test 字段的请求时,FieldValidationException 将被抛出。但是,这不会发生,因为 result.hasErrors() = false 出于某种原因。
有人知道为什么会这样吗?以及如何解决?
编辑:我们尝试将验证器 bean 添加到我们的 xml:
<beans:bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
但是现在我们启动服务器时出现以下异常:java.lang.NoClassDefFoundError: javax/validation/ValidatorFactory。
我们有以下 gradle 依赖项,据我了解,这些版本应该兼容:
compile group:'javax.validation', name:'validation-api', version:'1.1.0.Final'
compile group:'org.hibernate', name:'hibernate-validator', version:'5.2.2.Final'
【问题讨论】:
-
你开启mvc注解驱动了吗?
<mvc:annotation-driven /> -
你是否启用了 web mvc,你的类路径上是否有验证器实现(不仅仅是 api)!
-
是的,注释驱动已启用。如果这就是您的意思,我们有 hibernate-validator。
标签: java spring validation spring-mvc controller