如何实现基于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
相关产品推荐
相关产品推荐

