Springboot 自定義方法參數註解

在REST API中很多時候需要獲得用戶信息,分頁參數,定義自己的註解完成參數的解析注入,使得代碼簡潔高效。

在Spingboot提供的基礎上實現非常方便,需要三個步驟:定義註解、定義解析器類、註冊解析器。

以解析JWT token爲例,實現一個獲取令牌信息的功能。

  1. 定義註解
/**
 * 註解自動獲得當前登錄用戶
 */
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface AuthUser {
    boolean value() default true;
}
  1. 定義解析器類
@Component
public class AuthUserMethodArgumentResolver implements HandlerMethodArgumentResolver {

    // 判斷是否是包含註解,啓動解析
    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        return parameter.hasParameterAnnotation(AuthUser.class);
    }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {

        // 這裏代碼需要換成具體需求的實現邏輯
        // 獲取令牌
        String token = webRequest.getHeader("Authorization");
        // 返回解析後的結果
        return  JWTUtil.DecodeToken(token);
    }
}
  1. 註冊解析器
@Configuration
public class WebConfig implements WebMvcConfigurer {
    /** 註冊參數裝飾器解析 */
    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        argumentResolvers.add(new AuthUserMethodArgumentResolver());
    }
}

通過重寫addArgumentResolvers方法實現,可以調用argumentResolvers.add()添加多個解析器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章