前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Spring MVC中使用header路由到不同方法

Spring MVC中使用header路由到不同方法

作者头像
十毛
发布于 2019-12-23 11:13:35
发布于 2019-12-23 11:13:35
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

最近项目中需要针对URL进行统一化处理,其中有一条是需要根据不同的调用方提供不同的接口,但是实际上针对服务方来说,有的功能对所有渠道是一致的,有的功能是不同的。 一开始针对不同功能,我们也都放在同一个方法,但是随着渠道增多,以及不同渠道的差异增加,这种方式导致公共方法特别复杂。就连参数校验的逻辑就很长,也容易出错。 借用Spring MVC可以使用header路由的功能,我们实现了灵活的方法实现,针对一致性的功能,我们可以使用一个方法实现,有差异性的功能,可以路由到不同方法。而这些改动都对调用方透明,这样就方便服务方根据复杂度进行重构

实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RequestMapping("home")
@RestController
@SpringBootApplication
public class BootEntityApplication {

    public static void main(String[] args) {
        SpringApplication.run(BootEntityApplication.class, args);
    }

    /**
     * 如果header中的channel=wx(优先级低于指定了值的路由).
     */
    @GetMapping(value = "work", headers = {"channel"})
    public String workForAll() {
        return "any channel";
    }

    /**
     * 如果header中的channel=wx.
     */
    @GetMapping(value = "work", headers = {"channel=wx"})
    public String workForWeixin() {
        return "weixin";
    }

    /**
     * 如果header中的channel=qq.
     */
    @GetMapping(value = "work", headers = {"channel=qq"})
    public String workForQQ() {
        return "qq";
    }
}

使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ curl "http://localhost:8080/home/work" -H "channel:fd"
any channel

tenmao@tenmao-PC0 MINGW64 ~
$ curl "http://localhost:8080/home/work" -H "channel:wx"
weixin

tenmao@tenmao-PC0 MINGW64 ~
$ curl "http://localhost:8080/home/work" -H "channel:qq"
qq

还存在的问题

  • 如果让channel=wx或channel=weixin路由到同一个方法?
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
nginx通过自定义header属性来转发不同的服务
通过配置nginx 匹配请求头wx_unionid 来转发到灰度环境。 核心:客户端自定义的http header,在nginx的配置文件里能直接读取到。 条件:header必须用减号“-”分隔单词,nginx里面会转换为对应的下划线“_”连接的小写单词。
py3study
2020/03/04
11.2K0
【SpringBoot WebFlux 系列】 header 参数解析
上一篇 weblfux 主要介绍了 path 参数的解析与映射关系,在我们进入 url 参数/post 表单之前,先看一下另外的一种参数--请求头中的参数如何处理
一灰灰blog
2020/10/26
1.3K0
【SpringBoot WebFlux 系列】 header 参数解析
上一篇 weblfux 主要介绍了 path 参数的解析与映射关系,在我们进入 url 参数/post 表单之前,先看一下另外的一种参数--请求头中的参数如何处理
一灰灰blog
2020/09/11
7440
【SpringBoot WebFlux 系列】 header 参数解析
Spring Cloud Gateway 入门
Spring Cloud Gateway ,相比之前我们使用的 Zuul(1.x) 它有哪些优势呢?Zuul(1.x) 基于 Servlet,使用阻塞 API,它不支持任何长连接,如 WebSockets。Spring Cloud Gateway 使用非阻塞 API,支持 WebSockets,支持限流等新特性。本文首先用官方的案例带领大家来体验下Spring Cloud的一些简单的功能。
程序员果果
2019/05/21
9260
spring cloud gateway 路由转发原理_微服务网关的作用是什么
网关的基本组成,它由ID,目标URL,断言和过滤器组成.如果断言为true,将匹配路由
全栈程序员站长
2022/11/10
6830
spring cloud gateway 路由转发原理_微服务网关的作用是什么
Spring Cloud Gateway 之 Filter
网关经常需要对路由请求进行过滤,进行一些操作,如鉴权之后构造头部之类的,过滤的种类很多,如增加请求头、增加请求 参数 、增加响应头和断路器等等功能,这就用到了Spring Cloud Gateway 的 Filter。
程序员果果
2019/05/21
1.2K0
使用Vue完成前后端分离开发Spring,Django,Flask(一)
本篇题为 使用Vue,Spring Boot,Flask,Django 完成Vue前后端分离开发 将通过一个项目整合(一前端项目对应三个后端项目),完成一个简单的DEMO
双鬼带单
2018/07/12
2.5K0
使用Vue完成前后端分离开发Spring,Django,Flask(一)
SpringBoot学习笔记(三)——Spring MVC控制器、 Restful、Swagger
控制器提供访问应用程序的行为,通常通过服务接口定义或注解定义两种方法实现。 控制器解析用户的请求并将其转换为一个模型。在Spring MVC中一个控制器可以包含多个Action(动作、方法)。
张果
2022/05/09
1.5K0
SpringBoot学习笔记(三)——Spring MVC控制器、 Restful、Swagger
Spring Cloud 终于按捺不住推出了自己的服务网关 Gateway
Spring 官方最终还是按捺不住推出了自己的网关组件:Spring Cloud Gateway ,相比之前我们使用的 Zuul(1.x) 它有哪些优势呢?Zuul(1.x) 基于 Servlet,使用阻塞 API,它不支持任何长连接,如 WebSockets,Spring Cloud Gateway 使用非阻塞 API,支持 WebSockets,支持限流等新特性
纯洁的微笑
2018/12/28
6930
Spring Cloud 终于按捺不住推出了自己的服务网关 Gateway
Spring Cloud Gateway初体验
这篇文章讲述了如何简单地使用Spring Cloud Gateway,来源于Spring Cloud官方案例,地址https://spring.io/guides/gs/gateway 。
方志朋
2022/05/08
3310
Spring Boot @RequestParam元注释
在这篇文章中,我们将探索Spring的@RequestParam注释。@RequestParam注释结合web请求参数的控制器的方法。简单来说,我们可以使用 @RequestParam注释从查询参数和参数中获取值。让我们仔细看看一些重点:
lyb-geek
2022/03/10
1K0
在Spring Boot 2.0中使用ElasticSearch
为了测试目的,让我们创建以下两个REST控制器来调用Spring Data ElasticSearch CRUD存储库:
lyb-geek
2022/03/10
2K0
Spring Cloud Gateway-自定义GatewayFilter
GatewayFilter的作用域是指定的路由配置,路由配置选项里面需要通过filters指定想要使用的GatewayFilter列表。我们可以通过自定义GatewayFilter,做额外的扩展,实现一些内建GatewayFilter不存在的功能,并且应用到我们的路由配置中。
Throwable
2020/06/23
6.4K0
Spring Cloud Gateway-自定义GatewayFilter
Spring Cloud Gateway入坑记
最近在做老系统的重构,重构完成后新系统中需要引入一个网关服务,作为新系统和老系统接口的适配和代理。之前,很多网关应用使用的是Spring-Cloud-Netfilx基于Zuul1.x版本实现的那套方案,但是鉴于Zuul1.x已经停止迭代,它使用的是比较传统的阻塞(B)IO + 多线程的实现方案,其实性能不太好。后来Spring团队干脆自己重新研发了一套网关组件,这个就是本次要调研的Spring-Cloud-Gateway。
Throwable
2020/06/23
2.4K0
Spring Cloud Gateway入坑记
Spring Framework 学习笔记(3) Sping MVC
Spring MVC 分离了控制器、模型对象、过滤器以及处理程序对象的角色,这种分离让它们更容易进行定制。
张云飞Vir
2021/07/13
6740
Spring Boot CLI的安装与使用
*Spring Boot CLI的安装方式有很多种,支持sdkman安装,在MacOS上也可以使用HomeBrew。本文介绍手工安装,Windows, Mac, Linux系统都可以使用。
十毛
2019/12/19
9570
Golang微服务对接Spring-Cloud Gateway
最近接了一个需求,要把一些现有的golang微服务对接到老平台的spring cloud微服务框架中。这些golang微服务提供了一些proto+grpc接口,对接老平台目的就是,想要快速复用这些后端的业务能力,这样一来,只需要涉及交互的设计和前端编码的工作,后端不需要用java重写一遍造轮子,并且这些golang微服务是之前上过线的,所以稳定性和准确性都有保证。
于顾而言SASE
2024/03/20
2620
Golang微服务对接Spring-Cloud Gateway
【Spring底层原理高级进阶】【SpringCloud整合Spring Security OAuth2】深入了解 Spring Security OAuth2:底层解析+使用方法+实战
OAuth2(Open Authorization 2.0)是一种用于授权的开放标准协议,用于通过第三方应用程序访问用户在某个服务提供商上存储的资源,而无需共享用户的凭证(例如用户名和密码)。它允许用户授权给第三方应用程序访问受保护的资源,同时确保用户的凭证信息不被直接暴露给第三方应用程序。
苏泽
2024/03/01
2.3K0
【Spring底层原理高级进阶】【SpringCloud整合Spring Security OAuth2】深入了解 Spring Security OAuth2:底层解析+使用方法+实战
git 入门教程之 git bash 竟然不支持 tree 命令
git bash 是 Windows 用户安装 git 时默认安装的命令行工具,不仅界面漂亮功能也不错,大多数情况下可以替代 Windows 原生的 cmd 命令行.
雪之梦技术驿站
2019/05/14
2.8K0
git 入门教程之 git bash 竟然不支持 tree 命令
SpringBoot-12-之Ajax跨域访问全解析
一.什么是跨域呢? 1.引入: 先讲个故事:从前一个叫8080的大佬和一个8081的大佬各占一方天地,还有一个叫浏览器的大佬和8080还有8081关系都不错。浏览器和8080做着一件事(8080端应
张风捷特烈
2018/09/26
1.1K0
推荐阅读
相关推荐
nginx通过自定义header属性来转发不同的服务
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文