社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
在控制器中,需要获取用户详细信息,该信息可能存储在session或数据库中,为了简便,可以通过自定义注解的方式,将用户信息传入
1/**
2 * 获取当前用户信息
3 * @param currentUser
4 * @return
5 */
6@GetMapping("/getCurrentUser")
7public ResponseEntity<?> getCurrent(@CurrentUser User currentUser) {
8 Map<String, Object> data = new HashMap<>();
9 data.put("currentUser", currentUser);
10 return ResponseEntity.ok(data);
11}
2.1 创建自定义注解
1import java.lang.annotation.ElementType;
2import java.lang.annotation.Retention;
3import java.lang.annotation.RetentionPolicy;
4import java.lang.annotation.Target;
5
6@Retention(RetentionPolicy.RUNTIME)
7@Target(value = ElementType.PARAMETER)
8public @interface CurrentUser {
9
10}
2.2 创建参数解析器
1public class CurrentUserMethodArgumentResolver implements HandlerMethodArgumentResolver {
2
3 @Inject
4 private UserService userService;
5
6 /**
7 * 支持参数
8 *
9 * @param methodParameter
10 * MethodParameter
11 * @return 是否支持参数
12 */
13 @Override
14 public boolean supportsParameter(MethodParameter methodParameter) {
15 return methodParameter.hasParameterAnnotation(CurrentUser.class) && User.class.isAssignableFrom(methodParameter.getParameterType());
16 }
17
18 /**
19 * 解析变量
20 *
21 * @param methodParameter
22 * MethodParameter
23 * @param modelAndViewContainer
24 * ModelAndViewContainer
25 * @param nativeWebRequest
26 * NativeWebRequest
27 * @param webDataBinderFactory
28 * WebDataBinderFactory
29 * @return 变量
30 */
31 @Override
32 public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
33 return userService.getCurrent();
34 }
35
36}
上面,supportsParameter
方法返回true时,会执行 resolveArgument
方法,否则不执行。
2.3 配置xml文件
1<mvc:annotation-driven>
2 <mvc:argument-resolvers>
3 <bean class="com.leoxyk.CurrentUserMethodArgumentResolver"></bean>
4 </mvc:argument-resolvers>
5</mvc:annotation-driven>
2.4 controller中使用
1/**
2 * 获取当前用户信息
3 * @param currentUser
4 * @return
5 */
6@GetMapping("/getCurrentUser")
7public ResponseEntity<?> getCurrent(@CurrentUser User currentUser) {
8 Map<String, Object> data = new HashMap<>();
9 data.put("currentUser", currentUser);
10 return ResponseEntity.ok(data);
11}
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!