【问题标题】:Spring request validation not working春季请求验证不起作用
【发布时间】: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注解驱动了吗?&lt;mvc:annotation-driven /&gt;
  • 你是否启用了 web mvc,你的类路径上是否有验证器实现(不仅仅是 api)!
  • 是的,注释驱动已启用。如果这就是您的意思,我们有 hibernate-validator。

标签: java spring validation spring-mvc controller


【解决方案1】:

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

【讨论】:

  • 试过了,但我仍然得到 result.hasErrors() = false :(
  • 当您发布 testDTO 对象时,它的内部是什么?测试字段是否为空?
  • 是的,我只是使用 Chrome 海报,然后发布一个空 JSON {}
  • 如果我理解正确的话,它看起来不像:{test:""}?也许您应该尝试使用要验证的空字段发布它。此外,您没有回答我关于 testDTO 对象内部内容的问题(我的意思是哪些值具有您试图在您的 post 方法中验证的字段)。
  • 我不明白你的问题 - 正如我所说,我发布了一个空 JSON,如下所示:{}。如果我发布类似 {"test" : ""} 的内容,那么测试字段不为空(它是 ""),所以无论如何它应该是有效的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
  • 1970-01-01
  • 2018-09-04
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 2017-08-29
相关资源
最近更新 更多