当前位置:   article > 正文

spring mvc 不定路径 请求映射_springboot的requestmapping如何映射到不确定的路径

springboot的requestmapping如何映射到不确定的路径

公司项目整体结构迁移,从原有的spring + zk + thrift 转移到 spring-cloud, 搭建了spring-cloud 全家桶,新的微服务模块写的后台接口,接入到原有域名,遇到了手动转发的问题.

 

原有的管理后台, 称之为 admin-api, 是一个spring mvc工程, 向前端提供http接口,后端与原有的各个thrift项目链接, 起到转换http请求的作用. 新建立的spring-cloud项目, 通过zuul 提供统一的访问域名,但是和原有域名不同,存在权限控制及安全性问题.

 

最原始的方案, 在admin-api中提供controller, 对应相同的spring-cloud 工程接口,问题可以解决,但是重复的工作量很是乏味, 由于spring-cloud暴露的接口形式较为固定(get请求或者 post json请求), 故决定进行封装(重复的逻辑, 就是代码应该自动实现的地方).

方案一:

添加controller, 确定起始路径, 并设定路径变量, 然后按照路径变量中的serviceName及路径调用zuul进行转发. 但是不确定会有多少级的路径变量, 存在后续不断更新的工作, 放弃

 

方案二:

添加controller, 路径确定, 同时添加interceptor, 拦截指定规则的请求,获取路径变量并存储到attributes中, 代起转发到指定controller中, 则获取路径变量进行转发.

结果:  在 搭建的spring-boot中实验成功, 顺利进行转发, 但是在原有的项目中, 遇到了 DispatcherServlet 拦截的问题, 后查看spring mvc发现 , 所有请求会经过该servlet, 确认存在路径映射后, 才会下放到HandlerInterceptorAdapter 类中,所以在实际项目中, 我的拦截器在产生真正的效用前, 请求已经被返回, 其余改动耗费较多,暂时搁置.

 

方案三:

在即将重试方案一的时候,偶然发现了spring mvc 对不定路径的另外一种支持, 请求格式如下:

    @RequestMapping(value = "/myGateway/{serviceName}/**")
    public String moduleStrings(@PathVariable String serviceName, HttpServletRequest request) throws Exception {

在上述情形下, 该controller 会拦截以myGateway开头, 且至少含有serviceName的URI的请求, 然后我再request中获取到路径变量, 解析请求携带的parameters 以及body中的参数, 解析请求方式( GET POST), 即可完成一个轻量级的满足当前场景的微型网关服务,

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/194535?site
推荐阅读
相关标签
  

闽ICP备14008679号