A Spring @Controller that uses @SessionAttributes is designed to handle a stateful / multi-post form. Such
@Controllers use the specified @SessionAttributes to store data on the server between requests. That data should be cleaned
up when the session is over, but unless setComplete() is called on the SessionStatus object from a
@RequestMapping method, neither Spring nor the JVM will know it’s time to do that. Note that the SessionStatus object must
be passed to that method as a parameter.
Noncompliant code example
@Controller
@SessionAttributes("hello") // Noncompliant: this doesn't get cleaned up
public class HelloWorld {
@RequestMapping("/greet", method = GET)
public String greet(String greetee) {
return "Hello " + greetee;
}
}
Compliant solution
@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();
}
}