You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现基于java.util.function.Function的JSON列表反序列化

修正JSON转对象列表的Function实现

你的代码核心问题是:试图直接返回objectMapper.readValue()的解析结果,但方法要求返回的是Function<ByteBuffer, List<MyObject>>类型的函数实例,而非直接返回解析后的列表。

以下是修正后的代码:

public Function<ByteBuffer, List<MyObject>> deserialize(final ObjectMapper objectMapper) {
    // 返回符合Function接口的*lambda表达式*:接收ByteBuffer,输出List<MyObject>
    return buffer -> {
        try {
            // 调用ObjectMapper解析ByteBuffer到泛型列表
            return objectMapper.readValue(buffer, new TypeReference<List<MyObject>>(){});
        } catch (IOException e) {
            // 将检查型异常包装为非检查型,适配Function.apply()的异常约束
            throw new UncheckedIOException("JSON反序列化为List<MyObject>失败", e);
        }
    };
}

关键说明

  • 使用lambda表达式实现Function接口:lambda的参数是ByteBuffer,执行体完成JSON解析逻辑并返回结果
  • TypeReference<List<MyObject>>用来告诉Jackson正确识别泛型列表类型,避免类型擦除导致的解析错误
  • 捕获IOException并包装为UncheckedIOException:因为Function的apply()方法不允许抛出检查型异常,必须做异常转换

额外优化(可选)

如果原ByteBuffer的读写位置可能被外部修改,建议复制缓冲区避免影响原数据:

return buffer -> {
    try {
        // 复制缓冲区,保证原缓冲区的位置不受解析操作影响
        return objectMapper.readValue(buffer.duplicate(), new TypeReference<List<MyObject>>(){});
    } catch (IOException e) {
        throw new UncheckedIOException("JSON反序列化为List<MyObject>失败", e);
    }
};

内容的提问来源于stack exchange,提问作者bostonjava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:03:21