在Spring中validation数字

我对如何进行申请有一个基本的疑问。 我有一个表单,我需要validation所有输入是数字。 我在确定与表单相关的bean的属性类型时遇到问题。 我不知道是将它们设置为String还是加倍,原因如下:

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

在这种情况下,有没有人可以告诉我如何在此之前? 谢谢。

我建议你总是使用你的域类型而不是使用String只是因为这是HTTP发送params的方式。 如果某个字段的类型为double,您将在代码中使用它,并将其存储在数据库中。 让Spring将请求参数转换为您需要的类型。

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

您可以在控制器的initBinder方法中注册它们,并允许您将请求中的字符串转换为所需类型。 例如,请参阅CustomNumberEditor类,该类用于将用户输入的数字字符串解析为Bean的Number属性。 然后,您可以将其与Validator接口结合使用,以进行更复杂的检查。

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

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

 typeMismatch.yourField=Your user friendly error message goes here 

如果在message.properties(或您正在使用的等效消息包)中有以下表单中的条目,则可以将exception映射到自定义消息。

typeMismatch.fieldName,其中fieldName将是您要validation的字段的名称。

如果您使用的是Spring 3.0

看看带有注释覆盖默认值部分

Spring 3类型转换和validation

如果您使用的是Spring 2.x +,可以通过注册上面提到的Custom PropertyEditor来实现这一点