【发布时间】:2019-08-21 11:52:19
【问题描述】:
我正在尝试发送一个包含图像数组的 json:
{
Title: "Hello",
images: [
{
fileName: "hello",
data: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAA..."
}
]
}
并在 Spring+Hibernate 中将其保存到该实体中:
@Entity
@Table(name = "flat")
public class Flat {
private Title;
@OneToMany(fetch = FetchType.LAZY,
cascade = CascadeType.ALL,
mappedBy = "flat")
private List<File> images = new ArrayList<>(); //see the File entity below
...
这里是文件实体:
@Entity
@Table(name = "file")
public class File {
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "flat_id")
private Flat flat;
@Lob
private byte[] data;
...
(两个实体都有一个 id 字段)
因此,当“图像”中的“数据”字段为空时,一切正常。否则,我在 spring 中会出错:
JsonMappingException: Invalid UTF-8 start byte 0x80
我在这里看到了一个类似的问题(Jackson JSON parser invalid utf-8 start byte),那里的答案是关于错误的编码,但我仍然不明白我该如何解决这个问题。
【问题讨论】:
-
你是如何生成你的 Json 的?你在用什么图书馆?您使用什么注释来配置 json 生成?为什么你认为
byte[]会序列化为"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAA...形式的url? -
@ErwinBolwidt 我正在使用 FileReader 读取图像,然后像这样获取 src: src = reader.result ,然后将其放入“数据”字段。它甚至不适用于 String 而不是 byte[] :(
标签: java json spring hibernate spring-boot