我们正在尝试使用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'
答案 0 :(得分:0)
我认为注释@Valid应该在@RequestBody之前