使用Jackson(或Spring)解码Base64

时间:2012-11-16 10:37:04

标签: rest spring-mvc base64 jackson

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

我找到this(标准Java),我也发现了一个内部的Spring类(糟糕的主意)。

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

我也在使用Spring MVC 3,所以可以从Spring框架中创建一个类来实现这一点。

[拜托,没有Apache Commons。我想找到一个没有添加更多东西的解决方案]

3 个答案:

答案 0 :(得分:14)

使用byte[]作为属性,Base64编码/解码“正常工作”。没什么可做的。

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

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

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

答案 1 :(得分:7)

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

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

答案 2 :(得分:0)

在官方Spring documentation中有一个实用程序类,其中包含对base64编码/解码问题的单行解决方案。

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