如何从 HttpSession 而不是会话中注入一个值

How to inject a value from HttpSession instead of the session

当使用 spring MVC 时,只需将 HttpSession session 添加到方法的签名中即可将 HttpSession 传递给方法,稍后您可以执行类似

的操作
Integer valueFromSession = (Integer) session.getAttribute("key1")
Integer anotherValueFromSession = (Integer) session.getAttribute("key2")

我现在遇到的问题是我们需要在许多不同的控制器中以许多不同的方法从会话中获取值,所以我的问题是是否有可能从会话中获取值并且自动将它注入到方法中,因此而不是:

@GetMapping("/something")
public String foo(HttpSession session) {
    Integer valueFromSession = (Integer) session.getAttribute("key1")
    Integer anotherValueFromSession = (Integer) session.getAttribute("key2")

    return someMethod(valueFromSession, anotherValueFromSession);
}

我可以拥有:

@GetMapping("/something")
public String foo(HttpSessionData dataFromSession) {

    return someMethod(dataFromSession.getValue(), dataFromSession.getAnotherValue();
}

其中 DataFromSession 是从 HttpSession 填充的 class。有办法吗?

您可以将 @SessionAttribute 与 spring MVC 一起使用,它将从会话中检索现有属性,更多信息请参阅 here

@GetMapping("/something")
public String foo(@SessionAttribute("key1") Integer key1, @SessionAttribute("key2") Integer key2) {
    return someMethod(key1, key2);
}