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}



  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值