Java 验证最大Int、最大long值
我正在编写rest api,其中我们在RequestBody中接受dto,dto具有数据类型为int的字段。我想要实现的是,当用户尝试输入大于Integer.MAX_值的值时,我想给出错误,因为值必须小于2147483648。我尝试使用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
@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类型的字段分配更大的值,因此您添加的验证将永远不会启动。要做到这一点,您需要使字段类型变长。