当前位置: 首页 > 知识库问答 >
问题:

spring boot中的字段是否有“必须是数字”的验证符号?

汲时铭
2023-03-14

我现在开始学习spring boot,以及如何在类的字段中使用内置验证工具(anotation)。我知道如何验证字符串并将字段设置为@NotNull,但找不到任何方法对数值进行同样的操作。我曾考虑过使用@pattern作为regex,但希望有更清晰(更容易)的东西可以使用。

我不想设置@min或@max。它应该能够使用所有可能的数值int值。

当前代码,我想在这里设置zipCode(最后一个字段)处的符号

@Entity
public class Customer {
    @Id
    private int id;
    @NotNull
    @Size(min=2,max=15)
    private String firstName;
    @NotNull
    @Size(min=2,max=15)
    private String lastName;
    @NotNull
    @Size(min=5,max=45)
    private String address;
    @NotNull
    @Size(min=1,max=15)
    private String driversLicense;
    @NotNull
    @Size(min=1, max=3)
    private String licensesType;
    @NotNull
    @Size(min=1,max=30)
    private String phone;
    @NotNull
    @Size(min=1,max=15)
    private String nationality;
    @NotNull
    @Size(min=1,max=30)
    private String city;
    @NotNull
    private int zipCode;

使用@NotNull表示法,我得到的错误消息是

Failed to convert property value of type java.lang.String to required type int for property zipCode;
nested exception is java.lang.NumberFormatException: For input string:"xx"

并希望它是一个普通的错误消息,但当我这样做时

@NotNull(message="Custom error message") 
private int zipCode

我仍然得到上面的错误消息。

任何解决这两个问题的想法,将非常感谢

编辑:没有意识到这个问题只能有一个“批准”的答案。因为这是两个问题合二为一,@pankaj和@jargente都提供了很好的答案

共有2个答案

东门文斌
2023-03-14

您遇到的问题是,这个错误是在验证之前产生的,在反序列化阶段,我的意思是首先spring尝试将输入json转换为您在类中指定的类型,然后验证输入以确保约束是完全填充的(例如,一个字符串在大小指定的边界之间...等等)。

因此,自定义所需消息的方法是创建一个自定义的反序列化程序,或者将该属性标记为字符串,然后检查它是否存储了有效的数字,如果没有,则使用自定义消息。

华誉
2023-03-14

您可以将@positive注释用作

  @Positive
  private int zipCode;

来自@positive的文档

带注释的元素必须是严格的正数(即0被视为无效值)。支持的类型有:

  • BigDecimal
  • BigInteger
  • 字节、short、int、long、float、double及其各自的包装

空元素被认为是有效的。

 类似资料:
  • 我的Java应用程序“A”正在从另一个Java应用程序获取移动电话号码作为字符串。因此,在应用程序A获得手机号码字符串后,我需要验证该手机号码字符串中是否只有数字。为了验证我使用了如下的简单逻辑, 我正在检查I=1,因为国家代码的第一个字符将是“”。这种方法是O(n)。还有另一种方法,我们可以使用。这将抛出<代码> No.MultFrimeExtry,以便我们可以捕获并考虑它是一个字母数字字符串。

  • 我正在分析SonarQube 5.1版的Java SE 7项目。 然后,我在下面的代码中面对squid:S1948。 “可序列化”类中的字段应该是瞬态的或可序列化的 Serializable类中的字段本身必须是可序列化的或瞬态的,即使该类从未显式序列化或反序列化。这是因为在负载下,大多数J2EE应用程序框架都会将对象刷新到磁盘,并且具有非瞬态、不可序列化数据成员的所谓可序列化对象可能会导致程序崩溃

  • 我知道很多人问过相关的问题,但请帮我解决。我试图复制一个我在网上找到的开源温度控制实验室。我想在树莓皮上运行它。这就是我一直遇到的错误: 生成它的代码如下所示: 我相信这段代码试图通过以下代码与另一个python文件通信: 我还不知道我周围的python代码,所以一个非常清晰的“虚拟类”解决方案的解释会很有帮助。谢谢伙计们。

  • 运行此代码时 我得到这个错误 read_bikeins=pdf。PdfFileReader(bikeins)回溯(最近一次呼叫最后一次): 文件“”,第1行,以read\u bikeins=pdf格式。PdfFileReader(比基恩) 文件“C:\Users\Naveen Raj\Anaconda3\lib\site packages\PyPDF2\pdf.py”,第1084行,在init s

  • 问题内容: 我想要最简单的故障安全测试来检查JavaScript中的字符串是否为正整数。 对于各种非整数值返回true,并且为浮点字符串返回整数,例如“ 2.5”。而且我也不想使用某些jQuery插件。 问题答案: 为您提供两个答案: 基于解析 正则表达式 请注意,在两种情况下,我都将“正整数”解释为包括,即使它不是正数。如果您不愿意,我会提供注释。 基于解析 如果希望它是在合理值范围内的归一化十

  • 我想要最简单的故障安全测试来检查JavaScript中的字符串是否为正整数。 为所有类型的非整数值返回true,为浮点字符串返回整数,如“2.5”。我也不想使用jQuery插件。