下面是我遇到问题的映射方法,无论我传递给它什么值,验证都会返回“通过验证”。
@RequestMapping(value = "test", method = RequestMethod.POST)
@ResponseBody
public String getTest(@RequestBody @Valid @Max(32) long longValue, BindingResult result) {
if (result.hasErrors()) {
return "failed validation";
} else {
return "passed validation";
}
}
我知道 @Max 适用于我的应用程序,因为我使用它来验证向控制器返回大量数据的自定义对象。仅在我调用 @Valid 以及方法参数中对象的验证类型的情况下,它才不会运行验证。
hibernate-validator 不允许这样做吗?
我希望不必定义一个仅包含长值的对象,以便我可以对其进行验证。
我希望不必定义一个只包含很长的对象
值只是为了我可以对其进行验证。
恕我直言,定义一个包装 bean 是最明智的举动,因为 hibernate-validator 完全以 bean 的概念为中心,而且毕竟是 bean 验证规范的参考实现。该规范的主要动机之一是承认验证是跨越不同应用程序层的横切关注点,并提供一种机制来优雅地处理这个问题。这就是为什么它以 bean 为中心的原因,它是通过层传递的对象。
另一方面,以编程方式验证原语毕竟并不是什么大问题,您的代码可以简单地类似于
@RequestMapping(value = "test", method = RequestMethod.POST)
@ResponseBody
public String getTest(@RequestBody long longValue, BindingResult result) {
if (longValue > 32) {
result.rejectValue("longValue", "error.longValue", "longValue max constrained failed");
return "failed validation";
} else {
return "passed validation";
}
}
因此,在我看来,要么进行编程验证(如果足够简单),要么简单地包装该值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)