spring mvc注释验证整数

时间:2011-11-03 15:57:26

标签: spring spring-mvc annotations

我有一个对象。

public class MyObject
{
   ....
   @Column(name = "a_number") @NotNull @NumberFormat(style = Style.NUMBER) @Min(1)
   private Integer aNumber;
   ...
   //getters and setters
}

在我的控制器中,我的对象被发布了@Valid注释。除了这个数字,我确实在类中的所有其他字段(它们的所有字符串)上进行验证。如果我从我的表单输入一个数字它工作正常,如果我违反了@Min(1)它也给了我正确的验证错误。但问题是,如果输入字符串而不是数字,则会抛出NumberFormatException。

我已经看过许多Integer和验证的例子,但如果你在发布的表单中输入一个字符串,则没有人会说明。我需要在其他位置进行验证吗? JavaScript的?我想要一个符合其余spring验证的解决方案,所以我可以在其他类中使用它。我只想说一个错误,声明它必须是数字。我也尝试使用@Pattern注释,但显然只是为了字符串。

建议?

3 个答案:

答案 0 :(得分:9)

您可以将以下内容添加到控制错误消息的文件中(这些是在类型不匹配时查找的通用文件:

typeMismatch.commandObjectName.aNumber=You have entered an invalid number for ...
typeMismatch.aNumber=You have entered an invalid number for ...
typeMismatch.java.lang.Integer=You have input a non-numeric value into a field expecting a number...
typeMismatch=You have entered incorrect data on this page.  Please fix (Catches all not found)

答案 1 :(得分:4)

对于那些在这里没有明白想法的人,可以在spring 4.2.0中做些什么。 在messages.properties文件夹中创建文件名WEB-INF > classes。并将上述类型不匹配消息放在该文件中。 在spring配置或servlet.xml文件中创建以下bean。

<beans:bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<beans:property name="basename" value="messages"></beans:property>
</beans:bean>

对于问题中的private Integer aNumber;等模型属性以及其他验证规则,此规则也适用于类型不匹配转换。您将在此获得所需的信息。

<form:errors path="aNumber"></form:errors>

希望它可以帮助他人。

答案 2 :(得分:0)

仍然相关,所以我将添加消息源bean定义的编程方法:

@Bean
public MessageSource messageSource() {
    ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    messageSource.setBasename("messages");
    return messageSource;
}