Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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
javaxbean验证对方法参数无效_Java_Spring_Spring Boot_Bean Validation_Hibernate Validator - Fatal编程技术网

javaxbean验证对方法参数无效

javaxbean验证对方法参数无效,java,spring,spring-boot,bean-validation,hibernate-validator,Java,Spring,Spring Boot,Bean Validation,Hibernate Validator,javax验证在方法参数上不起作用。。这是一个测试代码,没有一个javax验证对方法参数有效 @RequestMapping(value = "/{id}", method = RequestMethod.PUT, params = "action=testAction") public Test update( @Size(min = 1) @RequestBody List<String> ids, @Min(3) @PathVariable St

javax验证在方法参数上不起作用。。这是一个测试代码,没有一个javax验证对方法参数有效

@RequestMapping(value = "/{id}", method = RequestMethod.PUT, params = "action=testAction")
public Test update(
        @Size(min = 1) @RequestBody List<String> ids,
        @Min(3) @PathVariable String name) {
    return doSomething(ids, name);
}

--解决方案--

按照接受的答案执行所有步骤。 另一个增加是类级别的注释

@Validated
class UserController
{
   @RequestMapping(value = "/{id}", method = RequestMethod.PUT, params ="action=testAction")
   public Test update(@Size(min = 1) @RequestBody List<String> ids,@Min(3) @PathVariable String name) {
    return doSomething(ids, name);
}
}
@已验证
类用户控制器
{
@RequestMapping(value=“/{id}”,method=RequestMethod.PUT,params=“action=testAction”)
公共测试更新(@Size(min=1)@RequestBody列表ID,@min(3)@PathVariable字符串名称){
返回剂量表(ID、名称);
}
}
您需要注册bean来启动方法级验证注释

委托JSR-303提供程序执行方法级 注释方法的验证

那么

@RequestMapping(value=“/{id}”,method=RequestMethod.PUT)
公共测试更新(
@RequestBody列表ID的大小(最小值=1),
@Min(3)@PathVariable(“id”)字符串名称){
返回剂量表(ID、名称);
}
如果您想处理验证异常

@ExceptionHandler(value = { ConstraintViolationException.class })
 @ResponseStatus(value = HttpStatus.BAD_REQUEST)
 public String handleResourceNotFoundException(ConstraintViolationException e) {
      Set<ConstraintViolation<?>> violations = e.getConstraintViolations();
      StringBuilder strBuilder = new StringBuilder();
      for (ConstraintViolation<?> violation : violations ) {
           strBuilder.append(violation.getMessage() + "\n");
      }
      return strBuilder.toString();
 }
@ExceptionHandler(值={ConstraintViolationException.class})
@ResponseStatus(值=HttpStatus.BAD_请求)
公共字符串句柄ResourceNotFoundException(ConstraintViolationException e){

SET谢谢你的详细回答,我忘了添加bean配置,另一件事是我忘了在类级别添加@validated注释。现在它可以工作了。除此之外,你需要将@validated添加到类型级别,否则类将不会触发验证。我只是在我的类中添加了@validated,它就工作了。
@Validated
class UserController
{
   @RequestMapping(value = "/{id}", method = RequestMethod.PUT, params ="action=testAction")
   public Test update(@Size(min = 1) @RequestBody List<String> ids,@Min(3) @PathVariable String name) {
    return doSomething(ids, name);
}
}
  @Bean
     public MethodValidationPostProcessor methodValidationPostProcessor() {
          return new MethodValidationPostProcessor();
     }
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
public Test update(
        @Size(min = 1) @RequestBody List<String> ids,
        @Min(3) @PathVariable("id") String name) {
    return doSomething(ids, name);
}
@ExceptionHandler(value = { ConstraintViolationException.class })
 @ResponseStatus(value = HttpStatus.BAD_REQUEST)
 public String handleResourceNotFoundException(ConstraintViolationException e) {
      Set<ConstraintViolation<?>> violations = e.getConstraintViolations();
      StringBuilder strBuilder = new StringBuilder();
      for (ConstraintViolation<?> violation : violations ) {
           strBuilder.append(violation.getMessage() + "\n");
      }
      return strBuilder.toString();
 }