RestControllerWithRequestMapping简化使用,修改requestMapping

  • Post author:
  • Post category:其他



参考

https://my.oschina.net/u/3101282/blog/3022154

在RequestMappingHandlerMapping类中存在判断加载的类是否为转发控制

protected boolean isHandler(Class<?> beanType) {


return AnnotatedElementUtils.hasAnnotation(beanType, Controller.class) || AnnotatedElementUtils.hasAnnotation(beanType, RequestMapping.class);

}


在抽象类AbstractHandlerMethodMapping在processCandidateBean存在调用isHandler

通过detectHandlerMethods获取被注解的类的方法,并注册请求url与方法的映射


尝试自定义过程增加RequestMapping的请求映射

注意点

1,限制映射的方法范围,

a,只有public的方法才加入,其他作用域不加入,控制范围

b,针对重载的方法的同名,不允许出现,如重复启动直接异常结束

在后续继续参考

https://blog.csdn.net/philip502/article/details/98502246

真正实现相同requestMap下根据请求url中version参数控制交易版本

该注解适合运用在方法上

继续研究关于类controller的注解


在AbstractHandlerMethodMapping子类初始化后

会通过processCandidateBean方法调用

isHandler判断后,执行detectHandlerMethods

核心逻辑在于

methods.forEach((method, mapping) -> {


Method invocableMethod = AopUtils.selectInvocableMethod(method, userType);

this.registerHandlerMethod(handler, invocableMethod, mapping);

});

但同时需要实现子类RequestMappingHandlerMapping

中getMappingForMethod的类似逻辑,自定义请求过滤的控制交易分发逻辑

结果是可以的,

关键逻辑

private RequestMappingInfo createRequestMappingInfo(AnnotatedElement element) {
    RequestMapping requestMapping = (RequestMapping) AnnotatedElementUtils.findMergedAnnotation(element, RequestMapping.class);

    if (requestMapping != null) {
        RequestCondition<?> condition = element instanceof Class ? this.getCustomTypeCondition((Class) element) : this.getCustomMethodCondition((Method) element);
        return this.createRequestMappingInfo(requestMapping, condition);
    }
    if (element instanceof Method) {
        Method cm = (Method) element;
        if (Modifier.isPublic(cm.getModifiers())) {
            return RequestMappingInfo.paths("/" + cm.getName()).build();
        }
    }

    return null;
}

具体请参见


vic99/RestControllerWithRequestMapping – Gitee.com

后续参考补充,按照lombok的编译时优化,针对指定方法自动加RequestMaping



版权声明:本文为Ender__原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。