繁体   English   中英

如何使用Hibernate Validator(JSR 303)在Spring Controller方法中验证两个或多个bean

[英]How to validate two or more beans in a Spring Controller method with Hibernate Validator (JSR 303)

我有两个课程(Bean)

public class BeanOne {
  @Min(1)
  private Integer idBeanOne;
  @NotBlank
  private String  nameBeanOne;
  @NotNull
  @Min(1)
  private Integer idOther;
  // ... Getters and Setters
}

public class BeanTwo {
  @Min(1)
  private Integer idBeanTwo;
  @NotBlank
  private String  nameBeanTwo;
  @NotNull
  @Min(1)
  private Integer idOtherTwo;
  // ... Getters and Setters
}

弹簧控制器

// Method in Controller
@RequestMapping(value = "/name.html", method = RequestMethod.POST)
public @ResponseBody
Map<String, Object> submitInsert(@Valid BeanOne one,
    @Valid BeanTwo two, BindingResult result) {

  if (result.hasErrors()) {
    // Errores
  } else {
    // :D
  }
}

有什么方法可以验证两个或多个bean? 我已经成功验证了一个bean,但是没有成功验证两个或多个bean。 我怎样才能做到这一点? 谢谢:D谢谢:D

在尝试使用JSR303验证两个或多个bean之后,尝试使用此解决方案。

public class BeanOne {
  @Valid
  private BeanTwo beanTwo;
  // other beans to validate
  @Valid
  private BeanN beanN;

  @Min(1)
  private Integer idBeanOne;
  @NotBlank
  private String  nameBeanOne;
  @NotNull
  @Min(1)
  private Integer idOther;
  // ... Getters and Setters
}

public class BeanTwo {
  @Min(1)
  private Integer idBeanTwo;
  @NotBlank
  private String  nameBeanTwo;
  @NotNull
  @Min(1)
  private Integer idOtherTwo;
  // ... Getters and Setters
}

//控制器弹簧

@Controller
public class XController {

  @Autowired
  private Validator validator;

  @RequestMapping(value = "/name.html", method = RequestMethod.POST)
  public @ResponseBody Map<String, Object> 
     submitInsert(BeanOne beanOne, BeanTwo beanTwo, BindingResult  result) {

    beanOne.setBeanTwo(beanTwo);
    // beanOne.setBeabN(beanN);
    validator.validate(beanOne, result);

    if (result.hasErrors()) {
      // Errores
    } else {
      // :D
    }
  }
  // more code ...
}

但是现在我有另一个问题:(

我有此文件Messages.properties

typeMismatch.java.lang.Integer = Must specify an integer value. 
typeMismatch.java.lang.Long = Must specify an integer value. 
typeMismatch.java.lang.Float = Must specify a decimal value. 
typeMismatch.java.lang.Double=Must specify a decimal value.

当一个字段需要一个数字并且用户输入文本时,此文件可以帮助我捕获异常

这非常适合第一个bean(BeanOne),但不适用于嵌套bean(BeanTwo,BeanN)

我希望他们能帮助我:D

谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM