使用Json Serializable类将base64字符串转换为字节数组

时间:2018-06-13 13:02:40

标签: spring spring-mvc spring-boot

我通过 JSON 格式的 ajax 发送表单数据,模型中我的模型类中有print (df) col1 col2 col3 ix 0 NaN 0.20 1.07 1 0.98 NaN 1.50 2 1.70 1.03 1.91 3 1.02 1.42 0.87 s = pd.Series([True] * len(df.columns), index=df.columns, name=np.nan) a = df.sub(1).abs().lt(0.05).append(s).idxmax() print (a) col1 1.0 col2 2.0 col3 NaN dtype: float64 类型变量

图片 BASE64 格式

byte[]

Ajax电话:

var profileImage = $('#profileImage').attr('src');

在模型类中,我使用Serialization将我的Base64字符串转换为字节数组,因为json值将是字符串。

这是我的GreenBusUser模型类

$
            .ajax({
                type : 'PUT',
                url : baseUrl + "/restApi/UpdateUser",
                data : JSON
                        .stringify({
                             "fname" : fname,
                             "lname" : lname,
                             "password" : password,
                             "email" : email,
                             "profileImage":profileImage
                        }),
                success: function(){

                },

                error : function(e){
                    ////////////console.log(e);
                },
                dataType : "json",
                contentType : "application/json"
            });

当我打印我的日志以获取图片@Lob @Column(name="profile_picture") @JsonDeserialize(using = StringtoByteArray.class) private byte[] profileImage= null; public byte[] getProfileImage() { return profileImage; } public void setProfileImage(byte[] profileImage) { this.profileImage = profileImage; } class StringtoByteArray extends JsonDeserializer<byte []> { @Override public byte[] deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException { return (Base64.getEncoder().encode(jsonParser.getText().getBytes(StandardCharsets.UTF_8))); } }

我得到了一些奇怪的价值:

  

[B @ 12db4fbd

我不知道导致问题的原因,也没有保存在我的postgresql数据库中。请解决。

更新

我已更新了一些代码

greenbususer.getProfileImage();

正如Paul Warren所说我需要反序列化然后我应该在那里解码我做了但是收到了错误。

Error Log

部分解决:

很奇怪,如果有人能回答这里发生的事情,那么我会接受他/她的回答,也会帮助很多人了解它。

而不是解码(如Timur告诉)base64字符串并在其上调用getBytes方法,我直接在base64字符串上调用了getBytes方法。像这样:

return (Base64.getDecoder().decode(jsonParser.getText().getBytes(StandardCharsets.UTF_8)));

但我收到的帖子 profile_image 的类型为 bytea ,而表达式的类型为 bigint 。重写或转换表达式(类似的东西)。

当我最终删除return (jsonParser.getText().getBytes("UTF-8")); 表达式时,它工作没有任何问题请看看。

这是插入了图像二进制数据的数据库。 enter image description here

1 个答案:

答案 0 :(得分:1)

你得到的价值是&#34; toString&#34;字节数组的表示。它不是数组的内容。出于调试目的,您只需将字节数组写入文件并使用标准工具验证图像。

Files.write(Paths.get("./debug_image.png"), greenBusUser.getProfileImage());

此外,您似乎需要修复&#34;反序列化&#34;通过解码(Base64 - &gt; byte [])替换编码(byte [] - &gt; Base64)..我相信它应该如下:

return Base64.getDecoder().decode(jsonParser.getText());