欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring boot中使用@SessionAttributes需要注意的地方 博客分类: Java SpringSpring bootSessionAttributes

程序员文章站 2024-03-21 15:10:52
...

在Spring Boot中,如果想把数据保存在session里,当然可以使用原生Request直接保存session,有个更方便的方法,那就是使用注解@SessionAttributes。

使用这个注解,需要搞清楚它的运行原理,也就是什么时候保存,什么时候取出,否则当得出非期望的结果时会很疑惑。

尤其当和注解@ModelAttribute混用的时候,需要搞清楚优先级。

 

1.Session的保存。

   当某个Controller类里使用了@SessionAttributes注解后,请求执行完handler后,会把保存在model里指定的数据保存到session里。

   由于执行时机的问题,当跟注解@ResponseBody混用的时候,会出错。

   使用@ResponseBody注解,返回一个实体类时,ReturnValueHandler用的是RequestResponseBodyMethodProcessor,在内部直接会把结果写入到response,然后关闭。

   然后再往session里写数据的话,就已经写不进去了。

   解决的方法是不用注解@ResponseBody,直接返回一个MappingJackson2JsonView实例即可。

 

2.Session的读取

   如果一个Controller类里同时使用了@SessionAttributes,有个数据绑定的方法上用@ModelAttribute,并且在一个请求处理handler的参数里,用了@ModelAttribute。

   先读取session,如果session没值,那么就执行绑定数据的方法,然后绑定请求数据

   先读取session,如果session有值,那么就跳过绑定数据的方法,然后绑定请求数据