"no content to map due to end of input":Jackson 反序列化时,输入流里没有任何内容可解析(比如传了空字符串 `""` 或 `null`)。
根本原因通常是这几类:
-
接口返回了空内容:HTTP 响应、Kafka 消息或文件读取结果是空串/空流,直接拿去 `readValue` 就报错。
-
数据源本身有问题:请求参数无效(比如 ID 已被删除)、服务异常或网络中断,导致返回了空响应。
-
Jackson 旧版本缺陷:部分旧版本(如 2.9.x)对空输入处理不友好,升级到 2.11.3 及以上 可减少这类问题。
解决方案:
- 反序列化前先判空(最推荐的做法)
if (json == null || json.trim().isEmpty()) {
// 返回 null、抛业务异常或走降级逻辑
return null;
}
return objectMapper.readValue(json, TargetClass.class);
- 升级 Jackson 依赖
Maven 里把 `jackson-databind` 升到较新版本,比如 `2.13.0` 或更高。
- 开启容错配置(不推荐作为主要手段)
objectMapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);
开启后空字符串会被当作 `null` 处理,但要注意目标对象是否允许为 null;这个配置对字符串类型字段本身不生效,只对 POJO、Map 等复合类型有效。
- 检查数据源
确认请求的 URL 参数有效、服务端返回了合法 JSON(哪怕是 `{}`),而不是裸空响应;如果服务端不可控,前端/调用方一定要做空值兜底。