【问题标题】:Decode Base64 with Jackson (or Spring)使用 Jackson(或 Spring)解码 Base64
【发布时间】:2012-11-05 01:52:27
【问题描述】:

这是我第一次尝试处理二进制数据,所以我对此很陌生。 我正在编写一个用于上传内容的 REST 服务,我将收到一个 Base64 编码的字符串。

我找到了this(标准 Java),还找到了一个内部 Spring 类(坏主意)。

是否有 Jackson 注释可以自动解码 Base64 中的属性? 我应该在我的对象中使用 String 还是 byte[]?

我也在使用 Spring MVC 3,因此可以使用 Spring 框架中的类来执行此操作。

[请不要使用 Apache Commons。我想在不添加更多内容的情况下找到解决方案]

【问题讨论】:

  • 是的,这正是我所指的类,“仅供内部使用。”。 (而且我在类路径中没有spring-security)。感谢您提供链接。

标签: rest spring-mvc base64 jackson


【解决方案1】:

使用byte[] 作为属性,Base64 编码/解码“正常工作”。没有额外的事情可做。

此外,Jackson 可以通过以下方式进行显式转换:

ObjectMapper mapper = new ObjectMapper();
byte[] encoded = mapper.convertValue("Some text", byte[].class);
String decoded = mapper.convertValue(encoded, String.class);

如果您想使用 Jackson 进行独立的 Base64 编码/解码。

【讨论】:

  • 最后我使用了DatatypeConverter.parseBase64Binary(String content); 并且正在工作,但我想这也可以。 :)
【解决方案2】:

对于使用 Java8 的用户,现在完全支持 Base64 编码/解码,并且不再需要第三方库。此外,它甚至更简单(从三行减少到两行)并且更直接。

byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
String decodedString = new String(decodedBytes);

【讨论】:

    【解决方案3】:

    Spring官方documentation中有一个base64编码/解码问题的实用工具类。

    byte[] bytes = Base64Utils.decodeFromString(b64String);
    

    【讨论】:

      猜你喜欢
      • 2017-11-06
      • 2015-07-14
      • 2013-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多