[JAVA] In der Sitzung registriertes Objekt muss serialisierbar sein

Serialisierbare Objekte werden in der Sitzung registriert!

Da die Implementierung abgeschlossen ist, wurde ich bei der Analyse mit SonarLint auf einen Codefehler hingewiesen.

HogeData data = new HogeData();
//Abkürzung(Füllen Sie die Daten mit Wert)
session.setAttribute("KEY", data); 

Im Datenteil von setAttribute befindet sich eine Wellenlinie. Der Inhalt der Anzeige ist wie folgt.

Make “HogeData” serializable or don’t store it in the session.

Ich habe es nicht bemerkt, weil die App gut funktioniert, aber es ist ein Fehler: Käfer: Also werde ich es entfernen!

Ursache

"Das in der Sitzung zu registrierende Objekt muss serialisierbar sein" Zitiert aus ↓

Eine Sitzung ist ein praktischer "Container", mit dem Sie Objekte über Bildschirmübergänge hinweg speichern können. Da sie jedoch im Grunde genommen einen Teil des Speicherbereichs zuweist und verwendet, (1) wenn der zugewiesene Bereich voll wird, oder (2) Wenn der Servlet-Container gestoppt wird, werden die gespeicherten Objekte in der Sitzung vorübergehend auf die Festplatte geschrieben und gespeichert. Der Plattenschreibvorgang eines solchen Objekts wird als Serialisierung bezeichnet. Nicht alle Objekte können in Java serialisiert werden, nur Klassen, die java.io.Serializable implementieren.

Wenn Sie ein Objekt speichern, das Serializable nicht in einer Sitzung implementiert, sollte es zunächst in Ordnung sein, verursacht jedoch Probleme, wenn eine Serialisierung erforderlich ist. (Normalerweise erhalten Sie eine Ausnahme namens NotSerializableException.) Dieses Problem ist bei vorübergehenden Tests in der Entwicklungsumgebung schwer zu finden und wird häufig nur in Form von Problemen während des kontinuierlichen Betriebs in der Produktionsumgebung entdeckt. Daher ist große Vorsicht geboten.

Es scheint wichtig zu sein, beim Speichern eines Objekts in HttpSession serialisierbar zu sein. TestData wurde darauf hingewiesen, weil Serializable nicht implementiert wurde.

Lösungen

Wie SonarLint betonte, habe ich Serializable in der TestData-Klasse implementiert.


import java.io.Serializable;

public class HogeData implements Serializable  {
    private String AAA;
    private String BBB;
    //Abkürzung
}

Referenzseite

Das in der Sitzung registrierte Objekt muss serialisierbar sein Informationen zur Persistenz der Tomcat-Sitzung

Recommended Posts

In der Sitzung registriertes Objekt muss serialisierbar sein
Wertobjekt in 3 Minuten
[Rails] Probleme, die mit devise nicht registriert / angemeldet werden können