我正在尝试发送包含图像数组的 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 ),答案是关于错误的编码,但我仍然不明白如何在我的情况下解决它。
最佳答案
data:
实际上是一种 URL 格式(参见 IETF )。所以你真的无论如何都不能使用它。
即使你只有
/9j/4AAQSkZJRgABAQAA...
这是一个编码的 Base64 String
,而不是字节数组。
您需要处理data
字段,并将String
再次转换为byte[]
。
我建议您避免直接将请求/响应主体映射到 JPA 实体,而是创建一个 DTO 类,您将使用它来映射到实体(反之亦然),并应用所需的转换。
关于java - Spring , hibernate : Invalid UTF-8 start byte 0x80 error when trying to save images,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55436065/