Spring MVC 自定义注解传参 - Go语言中文社区

Spring MVC 自定义注解传参


1.场景

在控制器中,需要获取用户详细信息,该信息可能存储在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.步骤

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}



版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/leoxyk/article/details/80416820
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-28 02:08:22
  • 阅读 ( 1212 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢