“JSON parse error: Cannot deserialize value of type `java.util.ArrayList<XXX>` from Object value ...

"JSON parse error: Cannot deserialize value of type `java.util.ArrayList<xxx>` from Object value (token `JsonToken.START_OBJECT`); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.util.ArrayList<xxx>` from Object value (token `JsonToken.START_OBJECT`)\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 3, column: 22] (through reference chain: cn.com.sinosoft.entity.dto.EnclosureUploadDTO[\"enclosureList\"])",

今天周末加班改bug时,用postman传参遇到上述一个错误,搞了我十分钟。。。今天分享给大家避免踩坑

首先我的controller类如下

    // 上传附件
    @PostMapping("/upload")
    public R upload(@RequestBody EnclosureUploadDTO uploadDTO){
        internalProjectService.uploadEnclosure(uploadDTO);
        return R.ok();
    }

EnclosureUploadDTO里面有这几个参数

@Data
public class EnclosureUploadDTO {
    private String id;

    /**
     * 完成情况说明
     */
    private String completionDescription;

    private List<Enclosure> enclosureList;
}

可以看到enclosureList是一个集合形式的数据

给大家看下我用postman传参方式

错误传参方式:

{
    "id": "1590593194199277570",
    "enclosureList": {
        "enclosureName": "soft.pdf",
        "enclosureType": 21,
        "enclosureId": "1591262808073314362",
        "url": "www.baidu.com"
    }
}

乍一看没啥问题啊,一执行的时候就报告错误
 

{

    "code": 500,

    "msg": "JSON parse error: Cannot deserialize value of type `java.util.ArrayList<cn.com.sinosoft.entity.Enclosure>` from Object value (token `JsonToken.START_OBJECT`); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.util.ArrayList<cn.com.sinosoft.entity.Enclosure>` from Object value (token `JsonToken.START_OBJECT`)\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 3, column: 22] (through reference chain: cn.com.sinosoft.entity.dto.EnclosureUploadDTO[\"enclosureList\"])",

    "data": null

}

通过错误提示最后一句话   

(through reference chain: cn.com.sinosoft.entity.dto.EnclosureUploadDTO[\"enclosureList\"])"

 大概能看出是我这个集合数据传参方式不对

正确的方式应该为:

{
    "id": "1590593194199277570",
    "enclosureList": [{
        "name": "soft.pdf",
        "enclosureName": "soft.pdf",
        "enclosureType": 21,
        "enclosureId": "1591262808073314362",
        "url": "www.baidu.com"
    }]
}

因为enclosureList是一个集合,要在后面加上中括号

好了,这就是我解决以上错误的方法。。。

  • 29
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
JSON parse error: Cannot deserialize value of type `java.util.ArrayList<java.lang.Object>` from Object value 是由于在反序列化过程中,将一个对象值解析为 `java.util.ArrayList<java.lang.Object>` 类型时出现的错误。这通常是因为传入的 JSON 数据与目标类型不匹配导致的。 解决这个问题的方法是确保传入的 JSON 数据与目标类型匹配。具体来说,你需要检查以下几个方面: 1. 检查传入的 JSON 数据是否符合预期的格式。比如,如果你期望传入一个数组,那么 JSON 数据应该以方括号 [] 包裹起来。 2. 检查传入的 JSON 数据中的键值对是否与目标类型的属性匹配。比如,如果目标类型有一个名为 `enclosureList` 的属性,那么传入的 JSON 数据中应该有一个名为 `enclosureList` 的键值对。 3. 检查传入的 JSON 数据中的值是否与目标类型的属性类型匹配。比如,如果目标类型的 `enclosureList` 属性是一个 `java.util.ArrayList<xxx>` 类型,那么传入的 JSON 数据中的 `enclosureList` 值应该是一个数组。 以下是一个示例代码,演示了如何解析 JSON 数据并将其转换为目标类型: ```java import com.fasterxml.jackson.databind.ObjectMapper; // 定义目标类型 public class EnclosureUploadDTO { private List<Enclosure> enclosureList; // getter 和 setter 方法 } public class Enclosure { private String enclosureName; private int enclosureType; private String enclosureId; private String url; // getter 和 setter 方法 } // 解析 JSON 数据 String json = "{ \"enclosureList\": [{ \"enclosureName\": \"soft.pdf\", \"enclosureType\": 21, \"enclosureId\": \"1591262808073314362\", \"url\": \"www.baidu.com\" }] }"; ObjectMapper objectMapper = new ObjectMapper(); EnclosureUploadDTO dto = objectMapper.readValue(json, EnclosureUploadDTO.class); ``` 请注意,上述示例中使用了 Jackson 库来进行 JSON 解析和对象转换。你可以根据自己的需求选择合适的 JSON 解析库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值