如何在java中序列化多部分文件类

如何在java中序列化多部分文件类,java,spring,serialization,file-upload,sonarqube,Java,Spring,Serialization,File Upload,Sonarqube,有人知道如何序列化org.springframework.web.multipart.MultipartFileclass吗 在某些情况下,它的表演可能是一个关键问题 这些sonarqube规则试图告诉您一个潜在的编程问题 如果你不想找出问题所在,你应该完全禁用Sonarqu。从您的问题来看,不清楚您是否确实想要序列化包含此字段的类,或者您是否只想修复此错误显示的问题,或者您是否只想在不关心消息试图通知您的潜在问题的情况下删除消息 我只想把这条信息处理掉 轻松点!只要卸载库贝。比随机输入你不懂的

有人知道如何序列化
org.springframework.web.multipart.MultipartFile
class吗

在某些情况下,它的表演可能是一个关键问题


这些sonarqube规则试图告诉您一个潜在的编程问题

如果你不想找出问题所在,你应该完全禁用Sonarqu。从您的问题来看,不清楚您是否确实想要序列化包含此字段的类,或者您是否只想修复此错误显示的问题,或者您是否只想在不关心消息试图通知您的潜在问题的情况下删除消息

我只想把这条信息处理掉 轻松点!只要卸载库贝。比随机输入你不懂的关键词要好得多

我想知道潜在的问题 Java内置了所谓的序列化机制。序列化是将对象转换为字节流,以便将其存储在文件中,通过网络发送,等等

问题是,MultipartFile不是为序列化而设计的。但是,这个
私有多部分文件的类字段位于,表示可以序列化,这就是问题所在:它表示可以序列化。但这不是真的

最有可能的是,您犯的错误(如果我们可以这样称呼它的话,这算不上什么错误)是您错误地将包含此字段的类标记为可序列化的。你真的序列化了这个东西吗?我想你不是

那么,您真的打算序列化这个对象吗?我想你不会的。除非在
ObjectOutputStream
或类似对象上显式调用例如
.writeObject(该类的someInstanceofthis)
,否则不会序列化此对象

您无意序列化此文件 序列化机制的一个缺点是,一旦一个超类型决定您是可序列化的(由实现
java.io.serializable
接口完成),那么您就是可序列化的,并且您不能记下:实际上,不,我不是。因此,正确地消除此警告是为了确保您的“extends Serializable”没有超类型。如果你能做到,就这么做。例如,如果您决定
扩展HashMap
,请不要这样做-相反,
实现Map
,创建一个HashMap类型的字段,并对Map中所有只调用HashMap字段的方法进行一行实现

但是,如果您正在实现/扩展的类型本身实现了Serializable,但无法从您的超类型中删除该类型,那么还有一种替代方法。为此,请添加以下方法:

private void writeObject(ObjectOutputStream out) throws IOException {
    throw new IOException("Not serializable");
}

private void readObject(ObjectInputStream in) throws IOException {
    throw new IOException("Not serializable");
}
通过这样做,从代码中可以清楚地看出,您明确希望该类不可序列化,sonarqube也会明白这一点

实际上,我确实想序列化这个 啊。这是一个更大的问题,因为MultipartFile不允许您这样做。唯一的解决方案是完全去掉multipartfile字段,并用可序列化的内容(如字符串列表、字节数组等)替换它,或者编写自己的代码来生成一个字节序列,以便以后可以从该字节序列还原此multipartfile。这可能意味着您需要存储所有这些字节,这可能会很痛苦——可能会有很多字节

要做到这一点,重写那些相同的方法,但实际上实现一些东西,而不是抛出异常。编写自己的writeObject方法有点复杂,但是您可以通过搜索web找到大量的示例

如果你真的不关心这个领域,那么想必,只是。。删除该字段。为什么有它


您可以将该字段标记为
瞬态
。然而,这意味着如果这个对象被序列化然后反序列化,它将是
null
。允许自己被序列化有什么意义
transient
主要用于表示缓存数据的字段,这些字段仅由在字段未初始化时仅(重新)计算的方法访问。一个简单的例子是,如果您的
hashCode()
方法是一个潜在的昂贵操作。

为什么您的类
首先是可序列化的
?要么将字段
设置为transient
,使其不被序列化,要么将
可序列化的
从您自己的类中删除。除非你真的需要它是可序列化的,因为你正在写它做光盘。但是不,除非重建Spring并使其可序列化(这可能会打开另一罐蠕虫),否则无法序列化
多部分文件。