问题
–
在维护公司开发的一个项目中,发现很多地方都要获取当前登录用户对象,而且是根据请求头中的token值去redis中获取用户信息,于是就很多地方出现了如下类似的代码
1 | java复制代码public Object commentAdd(TravelComment comment, HttpServletRequest request){ |
每次都要写HttpServletRequest request
,然后根据请求头中的token去获取当前登录对象,这样就导致了很多地方代码都重复了,要如何解决这种问题呢?
解决方案
在请求映射方法列表声明即可,就可以获取当前登录用户对象,代码如下
1 | java复制代码public Object commentAdd(TravelComment comment, UserInfo userInfo){ |
要如何实现上述操作呢? 那就是自定义SpringMVC的参数解析器来完成这项工作,因为通过现有的SpringMVC自带的参数解析器无法完成我们的需求
创建参数解析器
1 | java复制代码/** |
将自定义参数解析器添加到Spring容器中
1 | java复制代码@Configuration |
上述的所有操作,确实可以达到我们想要的结果,但是还是存在一些问题,并不是所有的请求映射方法列表中有UserInfo userInfo
都要走自定义的参数解析器,那要如何来区分是用框架自带的解析器还是自定义的呢?
使用自定义的注解来区分
在需要使用自定义解析器的请求映射方法列表中添加自定义注解
1 | java复制代码/** |
接口代码改进
1 | java复制代码public Object commentAdd(TravelComment comment, @UserParam UserInfo userInfo){ |
以上就是最终的解决方法!
本文转载自: 掘金