【问题标题】:Spring updating @SessionAttributes values春季更新@SessionAttributes 值
【发布时间】:2015-07-20 17:14:26
【问题描述】:

我正在尝试将一些数据存储在会话属性中,但是在之后尝试更新它时遇到了一些奇怪的问题。我正在使用 Spring Boot 1.2.4

我创建了一个测试控制器来描述问题。

@RestController
@SessionAttributes(TestController.ATTRIBUTE)
public class TestController {

    public static final String ATTRIBUTE = "attribute";

    @ResponseStatus(value = HttpStatus.OK)
    @RequestMapping(value = "/set/{value}", method = RequestMethod.POST)
    public void set(@PathVariable Long value, HttpSession session) {
        System.out.println("Set value to: " + value + " session id:\t" + session.getId());
        session.setAttribute(ATTRIBUTE, value);
    }

    @ResponseStatus(value = HttpStatus.OK)
    @RequestMapping(value = "/get", method = RequestMethod.GET)
    public void get(HttpSession session) {
        System.out.println("Value: " + session.getAttribute(ATTRIBUTE) + " session id:\t\t" + session.getId());
    }
}

例如,如果我这样调用这些方法:

localhost:8080/set/1
localhost:8080/set/2
localhost:8080/get

我希望得到如下所示的输出(不包括会话 ID):

Set value to: 1
Set value to: 2
Value: 2

但是我得到的是(包括会话 ID):

Set value to: 1 session id: 9D6F9948E81654E4087F418EF6BF5157
Set value to: 2 session id: 9D6F9948E81654E4087F418EF6BF5157
Value: 1 session id:        9D6F9948E81654E4087F418EF6BF5157

【问题讨论】:

  • 在 get & set 方法中打印会话 id 以确保您正在查看正确的会话
  • 我已经用会话 ID 更新了问题。这是同一个会话。

标签: java spring-mvc spring-boot


【解决方案1】:

我的同事提出了一种不同的方法,似乎效果很好。

我创建了一个类来保存我需要的数据。

@Component
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class DataHolder {

    private Long data;

    public DataHolder() {
        data = 0L;
    }

    public Long getData() {
        return data;
    }

    public void setData(Long data) {
        this.data = data;
    }
}

在我的控制器中,我只是 @Autowire 对象。

@RestController
class SomeController {

    @Autowired
    private DataHolder dataHolder;
    ...
}

通过这样做,我也可以在其他控制器之间共享这些数据,唯一需要做的就是在每个需要这些值的控制器中的对象上添加@Autowire 注释。

【讨论】:

    猜你喜欢
    • 2015-09-28
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多