Java Cannot deserialize instance of `xxx` out of START_ARRAY token问题2种情况解决(Java、Jackson)

时间:2025-02-18 08:46:13

目录

1 问题描述

2 问题分析

2.1 Java

2.2 Jackson


1 问题描述

: JSON parse error: Cannot deserialize instance of `` out of START_ARRAY token; nested exception is : Cannot deserialize instance of `` out of START_ARRAY token
 at [Source: (PushbackInputStream); line: 1, column: 100] (through reference chain: ["userId"])

2 问题分析

2.1 Java

1、后端接收参数类型是字符串,但是前端传参类型是数组,前端传参类型和后端参数类型不一致,导致报错。

解决办法:

前端传参类型改为字符串。

2、后端接收参数类型为List,但是前端传参类型为json,前端传参类型和后端参数类型不一致,导致报错。

解决办法:前端使用正确的数组传参格式即可。

[
    "344152905613578240"
]

2.2 Jackson

1、使用readValues(JsonParser p, Class<T> valueType)对List对象反序列化,方法使用错误导致报错。

    /**
     * 测试jackson,反序列化
     */
    @Test
    public void testJacksonDeserialize() throws Exception {
        List<Result> list = new ArrayList<>();
        ((null, 1440931124753108994L));
        ((null, new Date()));
        ((null, ()));
        ((null, ()));
        String listStr = (list);
        list = (().createParser(listStr), ).readAll();
    }

解决办法:

应该使用readValues(JsonParser p, TypeReference<T> valueTypeRef)方法进行反序列化。

    /**
     * 测试jackson,反序列化
     */
    @Test
    public void testJacksonDeserialize() throws Exception {
        List<Result> list = new ArrayList<>();
        ((null, 1440931124753108994L));
        ((null, new Date()));
        ((null, ()));
        ((null, ()));
        String listStr = (list);
        list = (().createParser(listStr), new TypeReference<List<Result>>(){}).readAll().get(0);
    }

旭东怪的个人空间-旭东怪个人主页-哔哩哔哩视频哔哩哔哩旭东怪的个人空间,提供旭东怪分享的视频、音频、文章、动态、收藏等内容,关注旭东怪账号,第一时间了解UP注动态。人生低谷不可怕,可怕的是坚持不到人生转折点的那一天/484264966?spm_id_from=333.1007.0.0