【问题标题】:Javax empty integer field validationJavax 空整数字段验证
【发布时间】:2017-09-26 11:21:32
【问题描述】:

我的应用程序使用 javax 验证薪金字段,它是 int。我应该使用什么注释,以避免这样的错误消息

无法将“java.lang.String”类型的属性值转换为 财产“薪水”所需的类型“int”;嵌套异常是 java.lang.NumberFormatException:对于输入字符串:“”

我当前的实现如下所示:

@Column(name = "salary", nullable = false)
@NotNull(message= "salary may not be empty")
@Range(min = 1)
private int salary;

我知道我不能将 NotBlank 用于 int 字段,这会导致错误。如果“字符串”为空,如何显示消息“工资可能不为空”而不是上面的异常?谢谢

【问题讨论】:

  • 将类型从原始类型 'int' 更改为 Wrapper 类 'Integer'。它会工作
  • 你可以检查@NotEmpty。
  • 谢谢,我知道了。还有其他解决方案吗?
  • 你也可以使用 Pattern ...@Pattern(regexp = "[\\s]*[0-9]*[1-9]+",message="msg")
  • @Pattern 不能用于 Integer。

标签: java spring hibernate validation spring-data-jpa


【解决方案1】:

我建议你使用对象类型Integer,它本身可以保存空值。

@Column(name = "salary", nullable = false)
@NotNull(message= "salary may not be empty")
@Range(min = 1)
private Integer salary;

以上内容确保始终有 salary 输入具有一个值并且它等于或大于 1。

【讨论】:

  • 有人能给我提示是什么让我的回答被否决了吗?这些匿名的downvotes真的没有帮助,如果有错误我不知道如何解决。
【解决方案2】:

将此设置为您的 Web 部署描述符文件 web.xml:

<context-param>
    <param-name>
        javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL
    </param-name>
    <param-value>true</param-value>
</context-param>

【讨论】:

    【解决方案3】:

    如果该字段包含在另一个类中,例如:

    public static class Employee {
        @Column(name = "salary", nullable = false)
        @NotNull(message= "salary may not be empty")
        @Range(min = 1)
        private int salary;
    }
    

    您还需要确保对 Employee 实例使用 @Valid:

    @Valid @NotNull
    public Employee someEmployee;
    

    【讨论】:

      【解决方案4】:
      @Column(name = "salary", nullable = false)
      @Range(min = 1, message= "salary may not be empty or null")
      private int salary;
      

      在@Range 中我们还可以提及消息。这意味着薪水将为 1 或大于 1,它不会为空或为空。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-17
        • 2019-04-18
        • 2021-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-20
        • 1970-01-01
        相关资源
        最近更新 更多