Jackson 2.7.4反序列化报错:无法将START_OBJECT转为String求助
问题分析与解决方案
核心错误原因
- JSON格式不匹配:错误提示
Can not deserialize instance of java.lang.String out of START_OBJECT token,说明请求中date字段是一个JSON对象(比如"date": {"time": "2024-05-20"}),但你的Filter类中date定义为String类型,Jackson无法将对象直接反序列化为字符串。 - Jackson版本冲突:你的Maven依赖使用的是
com.fasterxml.jackson(Jackson 2.x),但错误栈显示运行时调用的是org.codehaus.jackson(Jackson 1.x)——WebSphere 9默认自带了旧版本的Jackson,导致项目依赖的2.7.4版本未被加载,引发兼容问题。
解决方案
1. 修正JSON请求格式或实体类定义
- 如果前端应传递字符串日期:确保请求中
date字段是字符串类型,示例正确JSON:{ "date": "2024-05-20" } - 如果前端必须传递对象格式:修改
Filter类,将date字段改为对应嵌套类:@Data @EqualsAndHashCode(callSuper = false) @NoArgsConstructor @AllArgsConstructor public class Filter { private DateInfo date; // 其他字段... @Data public static class DateInfo { private String value; // 对应JSON对象中的字段名 } }
2. 解决Jackson版本冲突(WebSphere环境)
- 统一Maven依赖版本:确保
jackson-databind也指定2.7.4版本,避免依赖自动引入不一致的版本:<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.7.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.7.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.7.4</version> </dependency> - 配置WebSphere类加载顺序:
登录WebSphere管理控制台,依次进入:应用程序 > 你的应用 > 类加载和更新检测
将类加载顺序设置为父类最后加载(Parent Last),让项目优先加载自身依赖的Jackson库,而非WebSphere自带的旧版本。 - 排除WebSphere自带Jackson(可选):
如果是EAR部署,可在application.xml中添加排除规则;如果是WAR包,可通过Maven排除间接依赖的codehaus Jackson(若存在)。
3. 验证步骤
- 打印请求的完整JSON内容,确认
date字段的实际结构是否与实体类定义匹配; - 测试简单请求,确认格式修正后是否能正常反序列化;
- 检查WebSphere类加载配置生效后,运行时加载的Jackson版本是否为2.7.4。
内容的提问来源于stack exchange,提问作者Luciana Oliveira
相关产品推荐
相关产品推荐

