[JAVA] L'objet enregistré en session doit être sérialisable

Les objets sérialisables sont enregistrés dans la session!

Puisque l'implémentation est terminée, on m'a signalé une erreur de code lorsque je l'ai analysé avec SonarLint.

HogeData data = new HogeData();
//Abréviation(Remplir les données avec une valeur)
session.setAttribute("KEY", data); 

Il y a une ligne ondulée dans la partie données de setAttribute. Le contenu de l'indication est le suivant.

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

Je ne l'ai pas remarqué car l'application fonctionne bien, mais c'est bug: beetle: donc je vais l'enlever!

Cause

"L'objet à enregistrer dans la session doit être sérialisable" Cité de ↓

Une session est un "conteneur" pratique qui vous permet d'enregistrer des objets à travers les transitions d'écran, mais puisqu'elle alloue essentiellement une partie de la zone de mémoire et l'utilise, (1) lorsque la zone allouée devient pleine, ou (2) Lorsque le conteneur de servlet est arrêté, les objets enregistrés sur la session sont temporairement écrits sur le disque et enregistrés. Le processus d'écriture sur disque d'un tel objet est appelé sérialisation. Tous les objets ne peuvent pas être sérialisés en Java, seules les classes qui implémentent java.io.Serializable.

Si vous enregistrez un objet qui n'implémente pas Serializable dans une session, cela devrait être correct au début, mais cela cause des problèmes lorsque la sérialisation est requise. (Habituellement, vous obtiendrez une exception appelée NotSerializableException.) Ce problème est difficile à trouver dans les tests transitoires dans l'environnement de développement, et il est souvent découvert uniquement sous la forme de problèmes lors d'un fonctionnement continu dans l'environnement de production, il faut donc faire très attention.

Il semble qu'il soit essentiel d'être sérialisable lors du stockage d'un objet dans HttpSession. TestData a été signalé car il n'a pas implémenté Serializable.

Solution

Comme SonarLint l'a souligné, j'ai implémenté Serializable dans la classe TestData.


import java.io.Serializable;

public class HogeData implements Serializable  {
    private String AAA;
    private String BBB;
    //Abréviation
}

Page de référence

L'objet enregistré dans la session doit être sérialisable À propos de la persistance de session Tomcat

Recommended Posts

L'objet enregistré en session doit être sérialisable
Objet de valeur en 3 minutes
[rails] Problèmes qui ne peuvent pas être enregistrés / connectés avec l'appareil