InvalidDefinitionException:使用Sping Boot 在Blob列中存储文件时,未找到java.io.ByteArrayInputStream类的序列化程序

o3imoua4  于 2023-05-27  发布在  Java
关注(0)|答案(1)|浏览(190)

我开始用spring Boot 和angular做一个项目,我有一个数据库,我想在那里存储一个文件。我已经将这个列设置为Blob,但是在用文件填充我的数据库之后,Spring不想再工作了。
下面是我得到的错误:

ERROR[0;39m [35m19036[0;39m [2m---[0;39m [2m[nio-8080-exec-7][0;39m [36mo.a.c.c.C.[.[.[.[dispatcherServlet]     [0;39m [2m:[0;39m Servlet.service() for servlet [dispatcherServlet] in context with path [/alternance] threw exception [Request processing failed: org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class java.io.ByteArrayInputStream]] with root cause  com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class java.io.ByteArrayInputStream and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[7]->com.alternance.dto.StageDTO["motivationFile"]->jdk.proxy2.$Proxy134["wrappedBlob"]->com.mysql.cj.jdbc.Blob["binaryStream"])

下面的代码似乎是问题所在:

import java.sql.Blob;
import java.util.Date;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonIgnore;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity
public class Stage {
    
    @Id
    @GeneratedValue (strategy = GenerationType.IDENTITY)
    private Long id;
    private Blob motivationFile;

有人能帮帮我吗

ctehm74n

ctehm74n1#

阅读错误,这可能发生在Jackson库(负责将传入和传出的请求/响应对象从json序列化(反序列化)为它们各自的对象,反之亦然。
您遇到的问题可能是以下两种情况之一,或者两者都有:

  • 向后端发出请求时未设置content-type属性
  • 您没有正确注解动机文件

发送请求时,请确保使用表单数据内容类型。对于您的实体类,您必须使用@Lob注解字段,并可选地定义要保存的文件类型。例如

//...
    @Lob
    @Column(... , columnDefiniton="BLOB")
    private Blob motivationFile
//...

相关问题