Я отправляю данные формы через ajax в формате JSON и в модели у меня есть переменная типа byte[]
в классе модели
Изображение будет BASE64 format
var profileImage = $('#profileImage').attr('src');
Ajax-вызов:
$
.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"
});
В классе модели я использовал Serialization для преобразования моей строки Base64 в байтовый массив, поскольку значение json будет в строке.
Это мой класс модели GreenBusUser
@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)));
}
}
, когда я печатаю свой журнал, чтобы получить картинку greenbususer.getProfileImage();
Я получаю странное значение:
[B @ 12db4fbd
Я не знаю, что является причиной проблемы, и она также не сохраняется в моей базе данных postgresql.Пожалуйста, разрешите.
ОБНОВЛЕНИЕ:
Я обновил некоторый код
return (Base64.getDecoder().decode(jsonParser.getText().getBytes(StandardCharsets.UTF_8)));
Как сказал Пол Уоррен, мне нужно десериализовать, тогда я должен декодировать тамЯ сделал это, но получил ошибку.
Частично РАЗРЕШЕНО:
Это странно, и если кто-то может ответитьчто случилось здесь, тогда я приму его / ее ответ, а также помогу многим пролить свет на это.
Вместо того, чтобы декодировать (как сказал Тимур) строку base64 и вызвать метод getBytes, который я непосредственно вызвалМетод getBytes для строки base64.Например:
return (jsonParser.getText().getBytes("UTF-8"));
Но я получил, что столбец profile_image имеет тип bytea , а выражение имеет тип bigint .Перепишите или приведите выражение (что-то в этом роде).
Когда я, наконец, удалил выражение @Lob
, оно работало без каких-либо проблем, пожалуйста, посмотрите.
Это моя база данных, где бинарные данные изображениявставили.