Ktor处理POST请求JSON解析失效,报ByteBuffer.limit方法不存在错误
问题触发原因
该异常为Java版本兼容性问题,和请求头配置、业务代码逻辑无关:java.nio.ByteBuffer.limit(I)Ljava/nio/ByteBuffer;方法签名是Java 9及更高版本新增的协变返回实现,Java 8环境下该方法的返回值为java.nio.Buffer,不存在返回ByteBuffer的方法重载。你当前使用的Ktor版本是基于Java 9+编译的,部署运行时使用的是Java 8环境,调用NIO相关接口时就会匹配不到方法抛出该异常。
修复方案
你可以根据自己的运行环境要求选择任意一种方案修复:
- 升级运行环境的Java版本到11或更高版本,这是最推荐的方案,当前Ktor 2.x主流版本官方要求最低运行环境为Java 11,升级后无需修改任何代码和依赖配置即可正常运行。
- 如果你必须保留Java 8运行环境,可以将Ktor版本降级到1.6.x分支,该分支官方兼容的最低运行环境为Java 8,直接在构建配置中修改Ktor版本号为1.6.10及以下即可。
- 如果你需要使用Ktor 2.x版本同时兼容Java 8,可以额外引入官方提供的Java 8适配依赖,Gradle配置如下:
Maven可对应引入相同的implementation("io.ktor:ktor-network-jdk8:$ktor_version")ktor-network-jdk8依赖,该依赖会覆盖NIO相关实现适配Java 8的API签名。
配置修改完成后清理构建缓存重新编译运行即可解决问题。
内容的提问来源于stack exchange,提问作者Emon Hossain Munna
相关产品推荐
相关产品推荐

