赞
踩
目录
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"])
1、后端接收参数类型是字符串,但是前端传参类型是数组,前端传参类型和后端参数类型不一致,导致报错。
解决办法:
前端传参类型改为字符串。
2、后端接收参数类型为List,但是前端传参类型为json,前端传参类型和后端参数类型不一致,导致报错。
解决办法:前端使用正确的数组传参格式即可。
- [
- "344152905613578240"
- ]
1、使用readValues(JsonParser p, Class<T> valueType)对List对象反序列化,方法使用错误导致报错。
- /**
- * 测试jackson,反序列化
- */
- @Test
- public void testJacksonDeserialize() throws Exception {
- List<Result> list = new ArrayList<>();
- list.add(Result.error(null, 1440931124753108994L));
- list.add(Result.error(null, new Date()));
- list.add(Result.error(null, LocalDate.now()));
- list.add(Result.error(null, LocalDateTime.now()));
- String listStr = objectMapper.writeValueAsString(list);
- list = objectMapper.readValues(objectMapper.getFactory().createParser(listStr), Result.class).readAll();
- }
解决办法:
应该使用readValues(JsonParser p, TypeReference<T> valueTypeRef)方法进行反序列化。
- /**
- * 测试jackson,反序列化
- */
- @Test
- public void testJacksonDeserialize() throws Exception {
- List<Result> list = new ArrayList<>();
- list.add(Result.error(null, 1440931124753108994L));
- list.add(Result.error(null, new Date()));
- list.add(Result.error(null, LocalDate.now()));
- list.add(Result.error(null, LocalDateTime.now()));
- String listStr = objectMapper.writeValueAsString(list);
- list = objectMapper.readValues(objectMapper.getFactory().createParser(listStr), new TypeReference<List<Result>>(){}).readAll().get(0);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。