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

在Spring boot中,如何将带前导零的整数绑定到请求负载中的整数字段?

喻选
2023-03-14

我有一个如下的有效载荷。

{
    "name": "XXXX",
    "expMonth": 07,
    "expYear": 21
}

我的请求Body POJO如下所示。

public Class Card {
     private String name;
     private Integer expMonth;
     private Integer expYear;
}

但是,expMonth未正确绑定并引发异常。请提出前进的方向。

异常堆栈:

组织。springframework。http。转换器。HttpMessageEndableException:JSON解析错误:无效数值:不允许前导零;嵌套的异常是com。fasterxml。杰克逊。果心JsonParseException:无效数值:在[Source:(PushbackInputStream);第4行,第16列]不允许前导零

共有1个答案

谭浩皛
2023-03-14

但是,expMonth没有正确绑定并抛出异常。

根据异常堆栈,您有前导零,因此Jackson正在处理异常。你可以试试,

{
    "name": "XXXX",
    "expMonth": 7,    <--- Removing the leading zero(s).
    "expYear": 21
}

另一种方法是将其改为String,

{
    "name": "XXXX",
    "expMonth": "07",
    "expYear": 21
}

代码:

public Class Card {
     private String name;
     private String expMonth;
     private Integer expYear;
}

然后你可以这样做,

Integer.parseInt(expMonth);
 类似资料:
  • 问题内容: 给定以下示例: 输出为: 为什么? 问题答案: 这是因为前导零的整数文字是八进制整数(以8为底):

  • 问题内容: 我有下面的代码 和输出是 我期望输出如下。 当我打印直接int值时,为什么会给出?我期望Java自动将值从零开始转换为八进制。 和之间是什么关系? 问题答案: 前导0表示一个八进制数(以8为底)。 01111(八进制)是1 * 8 ^ 3 + 1 * 8 ^ 2 + 1 * 8 ^ 1 + 1 * 8 ^ 0 = 585(十进制) 将十进制数字1111转换为八进制字符串。八进制2127

  • 问题内容: 我可以用math.round舍入到小数位数的x位数,但是有没有办法舍入到小数点的左边?例如,如果我指定2个位置,则5变为05 问题答案: 您是否要求零填充?不是真正的舍入。您必须将其转换为字符串,因为数字对于前导零没有意义。像这样 或者,如果您知道您永远不会使用X个以上的零,那么可能会更好。这假设您永远不要超过10位数字。 如果您关心负数,则必须去除“-”并读取它。

  • 问题内容: 有没有更好的方法来获得此结果?如果num的位数比位数多,则此函数将失败,并且我认为它应该在库中的某个位置(例如Integer.toString(x,“%3d”)等) 问题答案: tring.format(http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html#syntax) 在你的情况下,它将是: 0 - to

  • 如何在java中找到负整数的最大有效数?我有以下代码,可以很好地处理正整数。这是代码: 现在,我可以通过将变量max减少到-5或低于-4来解决这个问题,但这是低效的,因为我们不知道最小值。 那么,如何实现呢?

  • 问题内容: 尝试这个: 因为什么时候40 = 32? 问题答案: 带有前导零的数字将解释为八进制和。