Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring请求验证不工作_Java_Spring_Validation_Spring Mvc_Controller - Fatal编程技术网

Java Spring请求验证不工作

Java Spring请求验证不工作,java,spring,validation,spring-mvc,controller,Java,Spring,Validation,Spring Mvc,Controller,我们正在尝试使用spring对请求进行输入验证。我们遵循了本教程:但它似乎不起作用。看起来由于某种原因,@NotNull和/或@Valid被忽略 例如,我们有以下控制器: @RequestMapping(value = "/test", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) @ResponseStatus(value = HttpStatus.OK) @ResponseBody publ

我们正在尝试使用spring对请求进行输入验证。我们遵循了本教程:但它似乎不起作用。看起来由于某种原因,
@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);
  }
}
因此,我们期望在发布没有
test
字段的请求时,会抛出
FieldValidationException
。但是,由于某种原因,
result.hasErrors()
=false,所以不会发生这种情况

有人知道为什么会这样吗?如何修复它

编辑:我们试图将验证程序bean添加到xml中:

<beans:bean id="validator"
        class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />

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

您启用了mvc注解驱动吗?
您启用了web mvc吗?您的类路径上是否有验证器实现(不仅仅是api)!是,已启用注释驱动。我们有hibernate验证器,如果你是这个意思的话。试过了,但我还是得到了结果。hasErrors()=false:(发布时testDTO对象的内部是什么?测试字段是否为空?是的,我只是使用Chrome Poster,发布一个空JSON{}如果我理解正确,它看起来不是这样:{test:}?也许你应该试着用你想要验证的空字段来发布它。另外,你没有回答我关于testDTO对象内部是什么的问题(我的意思是什么值有你试图在post方法中验证的字段)。我不理解你的问题-正如我所说,我发布了一个空JSON,比如:{}。如果我发布类似于{“test”:“”}的内容,那么test字段不是null(它是“”),因此无论如何它都应该是有效的。
<beans:bean id="validator"
        class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
compile group:'javax.validation', name:'validation-api', version:'1.1.0.Final'
compile group:'org.hibernate', name:'hibernate-validator', version:'5.2.2.Final'