当前位置:   article > 正文

报错:JSON parse error: Cannot deserialize value of type `long` from String “1,2“: not a valid `long` v

json parse error: cannot deserialize value of type `java.lang.long` from str

详细报错信息

JSON parse error: Cannot deserialize value of type `long` from String "1,2": not a valid `long` value; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `long` from String "1,2": not a valid `long` value at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 109] (through reference chain: com.ruoyi.system.domain.License["modulesName"])

错误场景

在我使用ele-select多选组件的时候需要将多选信息存入数据库,因为组件传出来的是个数组,所以我采用拆成字符串的形式存入数据库,后端以String格式接收

示例:

  1. //多选组件发出的数组格式
  2. [1,2,3]
  3. //经过拆分拼接后可以存入数据库的字符串格式
  4. "1, 2, 3"

前端部分代码:

  1. //多选组件
  2. <el-form-item label="包含模块" prop="modulesName">
  3. <el-select v-model="form.modulesName" multiple placeholder="请选择包含模块">
  4. <el-option
  5. v-for="dict in dict.type.sys_modules_name"
  6. :key="dict.value"
  7. :label="dict.label"
  8. :value="parseInt(dict.value)">
  9. </el-option>
  10. </el-select>
  11. </el-form-item>
  12. //处理提交的函数
  13. /** 提交按钮 */
  14. submitForm() {
  15. this.$refs["form"].validate(valid => {
  16. if (valid) {
  17. const modulesNameStr = this.form.modulesName.join(",");
  18. const formData = {
  19. ...this.form,
  20. modulesName: modulesNameStr
  21. }
  22. if (this.form.id != null) {
  23. updateLicense(formData).then(response => {
  24. this.$modal.msgSuccess("修改成功");
  25. this.open = false;
  26. this.getList();
  27. });
  28. } else {
  29. addLicense(formData).then(response => {
  30. this.$modal.msgSuccess("新增成功");
  31. this.open = false;
  32. this.getList();
  33. });
  34. }
  35. }
  36. });
  37. },

后端实体类对应字段:

  1. /** 包含模块(字典选择,多选) */
  2. @Excel(name = "包含模块", readConverterExp = "字=典选择,多选")
  3. private String modulesName;

于是此时组件发出来的数组数据已经被我拼成了字符串,实体类对应字段也可以接收字符串,但是运行的时候还是得到了上面的报错信息(怒)

经过到处询问得到了这样一个解释:

解决办法

这个报错信息的大致意思就是,此时我前端发出来的经过处理后的字符串JSON反序列化JSON库正在尝试将其转化为Long型(凭啥!),但是我后端的实体类对应字段是String,所以接收不到,解决办法也很简单,只要在对应字段加上注解:

@JsonFormat(shape = JsonFormat.Shape.STRING)

这样做可以将JSON反序列化时将其指定转换成字符串,就!可!以!了!
小白的我被这个问题困了一上午,我相信一定还会有其他人踩到这个坑,希望能对看到这个的同学有所帮助(大哭)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/681905
推荐阅读
相关标签
  

闽ICP备14008679号