我通过 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所说我需要反序列化然后我应该在那里解码我做了但是收到了错误。
部分解决:
很奇怪,如果有人能回答这里发生的事情,那么我会接受他/她的回答,也会帮助很多人了解它。
而不是解码(如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"));
表达式时,它工作没有任何问题请看看。
答案 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());