前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自定义HandlerMapping 实现动态多端绑定

自定义HandlerMapping 实现动态多端绑定

作者头像
分享干货的你
发布2021-04-06 16:43:29
1.1K0
发布2021-04-06 16:43:29
举报
文章被收录于专栏:分享干货的你分享干货的你

现在有这样一个需求,就是在原有的web 接口上面,在加上一个适应app 移动端的接口,路由还是同一个。这里我们就要思考一下了。 相同的路由,也就是requeestHeadlerMapping 要有不同的条件,将其绑定到对应的url .

这里看一下官方文档, 就是继承RequestMappingHandlerMapping,重写getCustomMethodCondition 方法 。

这里我们先新建一个Springboot web 项目, 写一个测试类,

启动看一下控制台

springboot2.1.0 之后是默认是不打印url 的详情的, 这里我们要在 application.properties 里面设置一下

将级别设置为trace .

我们先写一个自定义的注解 @MySystem

在写自己的handlerMapping

在写自己的Condition

代码语言:javascript
复制
public interface RequestCondition<T> {

  // 一个http接口上有多个条件规则时,用于合并
  T combine(T other);

  // 这个是重点,用于判断当前匹配条件和请求是否匹配;如果不匹配返回null
  // 如果匹配,生成一个新的请求匹配条件,该新的请求匹配条件是当前请求匹配条件针对指定请求request的剪裁
  // 举个例子来讲,如果当前请求匹配条件是一个路径匹配条件,包含多个路径匹配模板,
  // 并且其中有些模板和指定请求request匹配,那么返回的新建的请求匹配条件将仅仅
  // 包含和指定请求request匹配的那些路径模板。
  @Nullable
  T getMatchingCondition(HttpServletRequest request);
  // 针对指定的请求对象request发现有多个满足条件的,用来排序指定优先级,使用最优的进行响应
  int compareTo(T other, HttpServletRequest request);

}

从headler 里面获取参数 , 来区分那个平台,来找到对应平台的url , 执行里面的业务逻辑, 无侵入,不要改之前的业务代码,扩展性也好 。这里还要将其加入springmvc

设置一下优先级,

在写测试类测试一下

启动看一下控制台,

url 信息没有了,别着急,在application.properties 配置里面改一下

改为自己的handlerMapping

哈哈,成功了, 为啥第一个没有condition 呢。 看一下源码

默认就是没有的。

我们来请求测试一下

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 分享干货的你 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档