我正在使用Spring MVC来生成REST服务。我的大多数@RequestMappings都需要一个包含会话ID的cookie。 cookie的名称取决于部署服务的环境。例如,我在开发环境中使用'dev_session',在生产中使用'prod_session'。
据我所知,这排除了使用@CookieValue,因为名称是常量。我提出的其他选择是:
- 传入HttpServletRequest并调用getCookies()。这是
非常难看,特别是因为我需要做大约100
请求映射
- 使用AOP @Around建议获取HttpServletRequest,找到cookie然后将其传递给目标方法。我不确定这是否有效以及我是否必须同时将cookie值和HttpServletRequest作为目标方法的参数,以便我可以使用HttpServletRequest。无论哪种方式,它似乎都不是一个好方法。
- WebArgumentResolver。这是我提出的最好的选择,我有它的工作。我使用自定义注释@SessionCookie注释参数然后在WebArgumentResolver.resolveArgument()中如果参数具有该注释我返回cookie的值。不幸的是,它打破了我使用的自动生成的文档,因为它无法识别注释(Swagger-springmvc)。对于这么简单的事情,它似乎仍然很难。
所以我的问题是,有没有更好的方法来获取一个只在运行时知道名称的cookie?