如何从HttpSession而非会话中注入值

时间:2019-04-12 21:41:33

标签: java spring spring-mvc httpsession

使用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填充的类。有办法吗?

1 个答案:

答案 0 :(得分:0)

您可以在Spring MVC中使用@SessionAttribute,它将从会话中检索现有属性,更多信息请参见here

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