Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 验证最大Int、最大long值_Java_Rest_Validation_Exception_Dto - Fatal编程技术网

Java 验证最大Int、最大long值

Java 验证最大Int、最大long值,java,rest,validation,exception,dto,Java,Rest,Validation,Exception,Dto,我正在编写rest api,其中我们在RequestBody中接受dto,dto具有数据类型为int的字段。我想要实现的是,当用户尝试输入大于Integer.MAX_值的值时,我想给出错误,因为值必须小于2147483648。我尝试使用 @Max(value = Integer.MAX_VALUE, message = "Code must be less than 2147483648") private int code; 其中@Max来自javax.validation.constrai

我正在编写rest api,其中我们在RequestBody中接受dto,dto具有数据类型为int的字段。我想要实现的是,当用户尝试输入大于Integer.MAX_值的值时,我想给出错误,因为值必须小于2147483648。我尝试使用

@Max(value = Integer.MAX_VALUE, message = "Code must be less than 2147483648")
private int code;
其中@Max来自javax.validation.constraints.Max

但是我越来越

JSON分析错误:数值2147483648超出int的范围; 嵌套异常是 com.fasterxml.jackson.databind.JsonMappingException:数值 2147483648超出整数范围


那么,是否有任何其他注释可以实现这一点,或者我必须通过异常处理来实现这一点?

不幸的是,它的工作方式与此不同。问题是,它从未得到验证。而且永远不会。首先,它试图解析它并将值插入int。由于它太大,它无法映射它。如果您要输入任何其他值,它将达到验证

恐怕你是对的,唯一的办法就是处理例外情况

如果您使用的是Spring,那么可以使用@ControllerAdvice 实现所需的功能。 或者你也可以使用它,它会为你提供发生的错误,然后你可以按照你的意愿处理它们。 根据定义,int最多只能处理Integer.MAX_值

无论如何,另一个想法是将dto int设计为一个长值,这样无论传递的值有多大,都可以始终转换该值

在当前验证就绪的情况下,该值也在可以映射为int的正值范围内。 然而,这是一个设计决策


另一个提示:正如我看到的,它预见到了积极的价值,但是负面的呢?

< P>你认为代码字段是字符串吗?尝试验证提供的输入数据时,可以使用BigInteger验证传入的值是否在预期范围内

 if (new BigInteger(value).compareTo(BigInteger.valueOf(Integer.MAX_VALUE)) > 0
        || new BigInteger(value).equals(BigInteger.ZERO))

这还将使您能够根据需要将数据转换为int或long。通过对ID使用字符串,您消除了数据类型最大化的情况。

@Sambit,不,它没有回答我的问题。此验证不起作用,因为无法为int类型的字段分配更大的值,因此您添加的验证将永远不会启动。要做到这一点,您需要使字段类型变长。