Spring请求验证无效

时间:2015-10-20 15:18:32

标签: java spring validation spring-mvc controller

我们正在尝试使用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'

1 个答案:

答案 0 :(得分:0)

我认为注释@Valid应该在@RequestBody之前