session에 등록된 Object는 Serializable이어야 합니다.

2827 단어 SonarLintJava

세션에 등록된 객체는 Serializable 객체입니다!


설치가 완료되었기 때문에 ~SonarLint 분석 후 코드 오류가 발생했습니다
HogeData data = new HogeData();
//略(dataに値をつめる)
session.setAttribute("KEY", data); 
setattribute의 데이터 부분에 파선이 있습니다...
지적한 내용은 다음과 같다.
Make “HogeData” serializable or don’t store it in the session.
프로그램이 문제없이 실행되고 있어서 눈치채지 못했지만 버그라서 삭제!

까닭


"세션을 등록하는 Object는 Serializable이어야 합니다."인용↓
세션은 화면 너머로 저장 대상을 이동할 수 있는 편리한'용기'이지만 기본적으로 분배 메모리 영역의 일부분으로 사용되기 때문에 (1) 분배 영역이 가득 차거나 (2) 소파 용기를 멈출 때세션에서 저장된 개체를 저장하지 않도록 일시적으로 Disk 에 기록합니다.
이러한 객체의 Disk 시작 처리를 심각 처리라고 합니다.자바는 모든 대상이 엄숙해질 수 있는 것이 아니라 자바다.io.Serializable(implements)가 설치된 클래스에만 적용됩니다.
Serializable가 설치되지 않은 객체를 세션에 저장하면 처음에는 문제가 발생할 수 있지만 심각히 처리해야 할 경우 문제가 발생할 수 있습니다.
일반적으로 NotSerializable Exception과 같은 예외가 발생합니다.
이 문제는 개발 환경의 일시적인 테스트에서 발견하기 어렵다. 정식 환경에서 연속적으로 작업하는 과정에서 고장으로 처음 발견하는 경우가 많기 때문에 충분한 주의가 필요하다.
HttpSession에 Object를 저장할 때는 엄숙해야 합니다.
TestData에 Serializable가 설치되어 있지 않기 때문에 지적되었다.

해결책


SonarLin이 지적한 바와 같이 Serializable는TestData 클래스에서implements를 실현했다.

import java.io.Serializable;

public class HogeData implements Serializable  {
    private String AAA;
    private String BBB;
    //略
}

참조 페이지


• 세션을 등록하는 Object는 Serializable이어야 합니다.
· Tomcat에 대한 세션 지속성

좋은 웹페이지 즐겨찾기