当前位置:   article > 正文

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

cannot deserialize instance of

目录

1 问题描述

2 问题分析

2.1 Java

2.2 Jackson


1 问题描述

org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token
 at [Source: (PushbackInputStream); line: 1, column: 100] (through reference chain: com.dto.UserDto["userId"])

2 问题分析

2.1 Java

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

解决办法:

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

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

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

  1. [
  2. "344152905613578240"
  3. ]

2.2 Jackson

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

  1. /**
  2. * 测试jackson,反序列化
  3. */
  4. @Test
  5. public void testJacksonDeserialize() throws Exception {
  6. List<Result> list = new ArrayList<>();
  7. list.add(Result.error(null, 1440931124753108994L));
  8. list.add(Result.error(null, new Date()));
  9. list.add(Result.error(null, LocalDate.now()));
  10. list.add(Result.error(null, LocalDateTime.now()));
  11. String listStr = objectMapper.writeValueAsString(list);
  12. list = objectMapper.readValues(objectMapper.getFactory().createParser(listStr), Result.class).readAll();
  13. }

解决办法:

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

  1. /**
  2. * 测试jackson,反序列化
  3. */
  4. @Test
  5. public void testJacksonDeserialize() throws Exception {
  6. List<Result> list = new ArrayList<>();
  7. list.add(Result.error(null, 1440931124753108994L));
  8. list.add(Result.error(null, new Date()));
  9. list.add(Result.error(null, LocalDate.now()));
  10. list.add(Result.error(null, LocalDateTime.now()));
  11. String listStr = objectMapper.writeValueAsString(list);
  12. list = objectMapper.readValues(objectMapper.getFactory().createParser(listStr), new TypeReference<List<Result>>(){}).readAll().get(0);
  13. }

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

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

闽ICP备14008679号