这是用于接受请求主体的Java类。
public class ItemForReorderRequest {
private String itemNo;
@DecimalMax(value = "100", message = "Reorder quantity must be less than or equal to 100")
private Double quantity;
}
这是请求正文。
{
"itemNo": "000006510",
"quantity": 100.0
}
我需要验证quantity是否只接受数字输入。每当我向quantity输入一个字符串时,它都会显示“发生了一个意外的应用程序错误”,并显示多个错误,包括“className”:“com.快速XML.Jackson.核心.JsonParser”.
3条答案
按热度按时间xa9qqrwz1#
您可以使用
@Digits
-以下是教程但是@Digits只对数值有效!
需要考虑的另一点是,如果要将1.0视为
Double
,将1视为Integer
,则需要使用String类型的输入变量。Java将始终以与
Double y = 1.0
相同的方式处理Double x = 1
(意味着1是有效的Double),因此您将无法用代码区分它们。或者,您可以使用好的老正则表达式!
@Pattern(regexp = "^[0-9]+(\\.[0-9]+)?$", message = "Quantity must be a numeric value")
此regEx将匹配任何由一个或多个数字组成的字符串,后面可以跟一个小数点和一个或多个数字。它将拒绝任何非数字字符。
alen0pnh2#
您可以使用Apache Commons的NumberUtils(https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/math/NumberUtils.html)验证输入
NumberUtils提供了一系列有用的方法来检查String是否是有效的Java数字、可解析值、unicode数字等等。
这种方法提供了一个名为**NumberUtils.isCreatable(String)**的静态方法,它检查String是否是有效的Java数字。
上述方法接受:
Null和空/空白输入不被视为数字,因此该方法将返回false。
**NumberUtils.isParsable(String)**方法检查给定的字符串是否可解析。
可解析的数字是那些被任何解析方法成功解析的数字,例如Integer.parseInt(String)、Long.parseLong(String)、Float.parseFloat(String)或Double.parseDouble(String)。
与NumberUtils.isCreatable()不同,这个方法不接受十六进制数字、科学符号或以任何类型的限定符结尾的字符串,如'f'、'F'、'd'、'D'、'l'或'L'。
方法**StringUtils.isNumeric(CharSequence)**检查Unicode数字,表示:
任何语言的Unicode数字都是可接受的。由于小数点不被视为Unicode数字,因此它是无效的前导符号(无论是正数还是负数)也是不可接受的。
**StringUtils.isNumericSpace(CharSequence)**严格检查Unicode数字和/或空格。这与StringUtils.isNumeric()相同,只是它也接受空格,而且不仅接受前导和/或尾随空格,还接受数字之间的空格。
你也可以使用正则表达式(虽然大多数人不会推荐它,除非真的需要)。
使用正则表达式**-?\d+(.\d+)?**匹配由正整数或负整数和浮点数组成的数字字符串。
RegEx细分:
方法示例:
smdncfj33#
通常,除非对值执行数学运算,否则我会将所有值(包括数字)作为String存储在JSON对象中。
我将如下定义类(getter和setter是lombok注解):
注意:“No”是数字的可怕缩写。如果你必须缩写,考虑“Num”。
我将在收到JSON之后执行验证。
我喜欢Apache实用程序类,所以我可能会使用
NumberUtils.isParsable(blam.getQuantity())