在 Jackson ObjectMapper 上反序列化时禁用 Base64 编码

发布于 2025-01-18 21:10:42 字数 775 浏览 0 评论 0 原文

当 Jackson 将 JSON 输入映射到 DTO 时,它会自动解码 base64。我想对一个特定字段(这是一个字节数组)禁用此解码,因为我通过 REST API 将其按原样传输到其他服务,并且由于中间结构(编码字节),解码会导致内存使用量增加数组、解码的字节数组、要发送到其他服务的另一个编码的字节数组)。

有什么优雅的方法来实现这一点吗?我调试了一下,看看内部代码是什么样的,并找到了类 Base64Variant 不幸的是它是最终的,所以我无法覆盖它的行为。我想我可以复制粘贴 JsonParser 从自定义反序列化器中读取输入流(减去base64解码),但我首先想在这里问是否有人有更好的解决方案。

这与这个问题相同,但用于反序列化。

When Jackson maps a JSON input to a DTO it automatically decodes base64. I want to disable this decoding for one particular field (which is a byte array), because I transfer it through as-is to an other service through a REST API and the decoding causes an increase in memory usage due to intermediate structures (encoded byte array, decoded byte array, another encoded byte array to send to the other service).

Is there any elegant way to achieve this? I debugged a bit to see what the internal code is like and found the class Base64Variant which unfortunately is final so I cannot override its behaviour. I suppose I can go and copy-paste parts of the internal logic of JsonParser to read the inputstream (minus the base64 decoding) from within a custom deserializer but I first wanted to ask here if anyone has a better solution.

This is the same question as this one but for deserialization instead.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文