序列化 Java 邮件
Serialization Java Mail
我正在编写基于 JakartaMail Java 库的邮件服务。需要接收消息的内容。为此,我使用 msg.getContent(),其中 returns 是 Object 类型。
详细研究了这个问题后,我得出结论,没有通用的方法来分解消息的内容。您只能检查属于其中一种类型。因此,序列化 Object 类型,which returns getContent method完全,问题是不可序列化。我会很感激你的帮助
blic Blob mapDtoToEntity(Message msg) throws Exception {
Blob blob = new Blob();
Object object = msg.getContent(); // получаем содержимое сообщения
// создаем два потока baos - базовый класс для реализации выходного потока,
// в котором данные записываются в массив байтов
// ois - преобразует объекты в байты
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try (ObjectOutputStream ois = new ObjectOutputStream(baos)) {
ois.writeObject(object);
byte[] arrayByteObject = baos.toByteArray();
blob.setObject(arrayByteObject);
}
baos.close(); //закрываем поток
return blob;
}}
Caused by: java.io.NotSerializableException: jakarta.mail.internet.MimeMultipart
at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1197)
at java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:354)
at com.axsoft.mail.utils.impl.BlobMappingUtils.mapDtoToEntity(BlobMappingUtils.java:26)
at com.axsoft.mail.services.Service.saveMessageRepos(Service.java:51)
at com.axsoft.mail.MailApplication.run(MailApplication.java:26)
a org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:767)
Class MimeMessage
有方法 writeTo(OutputStream)
可以让你写出整个信息,包括它的 headers。它有一个构造函数 MimeMessage(Session, InputStream)
,可让您从先前序列化的消息创建消息。
如果您不想保存整封邮件而只想保存其 body,您可以使用 getDataHandler().writeTo(outputStream)
。
我正在编写基于 JakartaMail Java 库的邮件服务。需要接收消息的内容。为此,我使用 msg.getContent(),其中 returns 是 Object 类型。 详细研究了这个问题后,我得出结论,没有通用的方法来分解消息的内容。您只能检查属于其中一种类型。因此,序列化 Object 类型,which returns getContent method完全,问题是不可序列化。我会很感激你的帮助
blic Blob mapDtoToEntity(Message msg) throws Exception {
Blob blob = new Blob();
Object object = msg.getContent(); // получаем содержимое сообщения
// создаем два потока baos - базовый класс для реализации выходного потока,
// в котором данные записываются в массив байтов
// ois - преобразует объекты в байты
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try (ObjectOutputStream ois = new ObjectOutputStream(baos)) {
ois.writeObject(object);
byte[] arrayByteObject = baos.toByteArray();
blob.setObject(arrayByteObject);
}
baos.close(); //закрываем поток
return blob;
}}
Caused by: java.io.NotSerializableException: jakarta.mail.internet.MimeMultipart
at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1197)
at java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:354)
at com.axsoft.mail.utils.impl.BlobMappingUtils.mapDtoToEntity(BlobMappingUtils.java:26)
at com.axsoft.mail.services.Service.saveMessageRepos(Service.java:51)
at com.axsoft.mail.MailApplication.run(MailApplication.java:26)
a org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:767)
Class MimeMessage
有方法 writeTo(OutputStream)
可以让你写出整个信息,包括它的 headers。它有一个构造函数 MimeMessage(Session, InputStream)
,可让您从先前序列化的消息创建消息。
如果您不想保存整封邮件而只想保存其 body,您可以使用 getDataHandler().writeTo(outputStream)
。