在Spring中验证数字

时间:2010-01-20 10:23:48

标签: java validation spring spring-mvc

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

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

在这种情况下,有没有人可以告诉我如何进行先验? 感谢。

3 个答案:

答案 0 :(得分:3)

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

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

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

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

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

typeMismatch.yourField=Your user friendly error message goes here

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

如果您使用的是Spring 3.0

查看覆盖带注释的默认值

的一部分

<强> Spring 3 Type Conversion and Validation

如果您使用的是Spring 2.x +,可以通过注册上面的帖子

中提到的Custom PropertyEditor来实现这一点。