@Controller 클래스에서 @SessionAttributes 를 사용하는 경우 SessionStatus 객체의 setComplete 메소드를 호출해야 합니다.

 

@SessionAttributes를 사용하는 Spring @Controller는 stateful/multi-post 형식을 처리하도록 설계되었습니다.
이러한 @Controller는 지정된 @SessionAttributes를 사용하여 요청 간에 서버에 데이터를 저장합니다.
해당 데이터는 세션이 끝나면 정리되어야 하지만 @RequestMapping 메서드에서 SessionStatus 객체에 대해 setComplete()가 호출되지 않는 한 Spring 이나 JVM 에서 해당 데이터를 정리할 수 없습니다.
SessionStatus 개체는 해당 메서드에 매개 변수로 전달되어야 합니다.

규칙을 어긴 코드

@Controller
@SessionAttributes("hello")  // 규칙을 어긴 코드; 여기는 정리되지 않습니다.
public class HelloWorld {

  @RequestMapping("/greet", method = GET)
  public String greet(String greetee) {

    return "Hello " + greetee;
  }
}

규칙을 준수한 해결책

@Controller
@SessionAttributes("hello")
public class HelloWorld {

    @RequestMapping("/greet", method = GET)
    public String greet(String greetee) {

        return "Hello " + greetee;
    }

    @RequestMapping("/goodbye", method = POST)
    public String goodbye(SessionStatus status) {
        //...
        status.setComplete();
    }

}

If you like SONARKUBE, don’t forget to give me a star. :star2:

원문으로 바로가기

Star This Project