我有一个包含JSON结构化数据的文件,其中一个属性是Base64编码的图像。我使用POJOMap到Java对象,并将上述图像属性指定为String类型。(尝试了byte[]
,但无法创建Java对象,因此我使用了String。)
现在,我必须使用属性类型为byte[]
的JPA实体将其保存到数据库中。
实体:
@Lob
private byte[] profilePic;
日期:
private String profilePic;
问题:
dto.getProfilePic().getBytes()
或
getBytes("utf-8")
正在更改映像,映像已损坏。映像从iVBORw0KGgoAAAANSUhEUgAAB.....
更改为
到89504E470D0A1A0A0000000D4948445200....
**注意:**内容在JSON格式的文件中
是否可以使用任何其他JSON库从文件序列化到byte[]
?使用的库是Gson。
Gson gson = new Gson();
StagingDTO[] infoArray = gson.fromJson(reader, StagingDTO[].class);
或者从文件中获取byte[]
的任何方法?
3条答案
按热度按时间kuuvgm7e1#
您可以使用java.util.Base64.decode()。此方法获取一个Base64字符串并返回byte[]。最后您应该保存byte[]。
js4nwp542#
tl;dr:使用Base64.Decoder类别。
一个简单的工作示例:
在您的示例中,只需将
decode()
调用中的REDDOT_png
交换为DTO的getProfilePic()
方法,并删除其他三行。你为什么要面对这个问题
问题在于,您正在
String
类的Object上调用getBytes()
方法。getBytes()
方法实际上执行以下操作(源代码):使用平台的默认字符集将此字符串编码为字节序列,并将结果存储到新的字节数组中。
例如:
写:
97
,它是“a”的Ascii / UTF-8 / UTF-16
...表示。但是,您并不想将
base64 String
的二进制表示形式持久化到数据库中,您实际上需要的是解码后的base64 String
,它只是文件的二进制内容。q7solyqu3#
我从gson切换到Jackson,它工作正常