java - 在 Spring 中验证数字

标签 java validation spring spring-mvc

我对如何继续我的申请有基本的疑问。我有一个表格,我需要验证所有输入都是数字。我在确定与表单关联的 bean 的属性类型时遇到了问题。我不知道是将它们设置为 String 还是 double,原因如下:

  • 如果我将它们设置为 double :如果我在输入中输入了一些不是数字的东西,当 spring 将输入填充到 bean 中时,我会在 JSP 中得到一个异常,它无法将它转换成 double 。
  • 如果我将它们设置为 String: 我有一个很好的验证,尽管我必须稍后将它们更改为 double。但我的问题是这个bean存储在一个带有hibernate的数据库中,注释@column会将它存储为文本,我想将它存储为一个double。是否可以将列类型更改为双延迟类型?

在这种情况下,有人可以告诉我如何处理吗? 谢谢。

最佳答案

我建议您始终使用您的域类型,而不是仅仅因为 HTTP 发送参数的方式而使用字符串。如果字段的类型为 double,您将在代码中按原样使用它,并将其按原样存储在数据库中。让 Spring 将请求参数转换为您需要的类型。

数据绑定(bind)对于允许将用户输入动态绑定(bind)到应用程序的域模型(或您用来处理用户输入的任何对象)非常有用。 Spring提供了所谓的DataBinder类来做到这一点。

您可以在 Controller 的 initBinder 方法中注册它们,并允许您将请求中的字符串转换为所需的类型。参见例如 CustomNumberEditor用于将用户输入的数字字符串解析为 bean 的数字属性的类。然后您可以将其与 Validator interface 结合使用用于更复杂的检查。

编辑: Spring 绑定(bind)在转换失败时使用 typeMismatch 错误代码作为绑定(bind)错误(required 代码,如果您根据需要指定字段但你不提供它)。在您的情况下,它默认显示异常消息。要将消息更改为更友好的消息,您必须使用 typeMismatch 前缀在属性文件中提供捆绑 key 。

这由 DataBinder.setMessageCodesResolver 指定,默认为 org.springframework.validation.DefaultMessageCodesResolver .在javadocDefaultMessageCodesResolver您可以看到完整的示例,但基本上,您只需在属性文件中添加如下条目:

typeMismatch.yourField=Your user friendly error message goes here

关于java - 在 Spring 中验证数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2100590/

相关文章:

java - 显示对话框的软键盘

java - 字节数组java xml序列化

java - SignedObject 是否可以安全地交付给客户端应用程序

java - 如何在 Apache Shiro 中使用编程配置创建新帐户?

django - 在 Django 管理中替换 "this field is required"消息

java - 如何在自定义约束 validator 中使用注释元素

java - 在已有的类中实现 Spring 事务处理

ruby-on-rails - Rails 中多个字段的相同自定义验证

java - 在服务类中使用多个 dao 完成事务

java - PropertyPlaceholderConfigurer 用于读取属性文件和数据库