V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
handsomezai
V2EX  ›  Java

Springboot 如何为 API 添加统一路径前缀?

  •  
  •   handsomezai · 2019-12-21 11:23:25 +08:00 · 12592 次点击
    这是一个创建于 1833 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Springboot 如何为 API 添加统一路径前缀,类似 /api/v2/**这种,不使用 server.servlet.context-path,这个是控制整个项目的,请大神献策
    17 条回复    2020-03-02 15:24:03 +08:00
    arthas2234
        1
    arthas2234  
       2019-12-21 11:26:55 +08:00
    nginx 反向代理?
    xuwenping
        2
    xuwenping  
       2019-12-21 11:32:23 +08:00 via Android
    不太明白 server.servlet.context-path 为什么不能解决你的问题。或者写个 basecontroller,其他所有的 controller 都继承它,basecontroller 用来实现你的同一路径前缀
    w292614191
        3
    w292614191  
       2019-12-21 11:32:50 +08:00
    @RequestMapping("/api/user/getUser")

    @RequestMapping("/api/menu/getMenu")
    @RequestMapping("/api/menu/delMenu")

    @RequestMapping("/api/v2/getList")
    zwh2333
        4
    zwh2333  
       2019-12-21 11:34:50 +08:00 via iPhone
    好像用 Spring Cloud Gateway 可以
    qinxi
        5
    qinxi  
       2019-12-21 11:37:05 +08:00
    server.context-path:
    cedoo22
        6
    cedoo22  
       2019-12-21 11:38:20 +08:00
    nginx ?
    spring zuul?
    拦截器 / 过滤器??
    handsomezai
        7
    handsomezai  
    OP
       2019-12-21 11:42:03 +08:00
    主要是项目的后台管理端 layui 写的使用 nginx 部署。初期是前端后台的接口全部写在同一个 springboot 项目中了,现在想把前端的接口全部抽出来单写一个项目里面加入统计和各种日志以应对 SEM 的各种需求变更,至于后台想把 layui 集成到项目中去,这样后期可以做 IP 白名单进行限定 IP 登录,但是后台中的接口能不能再加个统一的前缀,全部手动改几百个接口都要去改动
    handsomezai
        8
    handsomezai  
    OP
       2019-12-21 11:44:58 +08:00
    @arthas2234 nginx 线上在使用,现在要根据 IP 白名单控制后台页面的输出,所以使用 springboot 本身进行 IP 动态管控
    handsomezai
        9
    handsomezai  
    OP
       2019-12-21 11:47:56 +08:00
    @xuwenping server.servlet.context-path 是整个项目的路径,因为现在将后台管理页面加入进去(之前分离的单独部署,nginx 反向代理),第二种继承 baseController 对整个项目改动太多
    devld
        10
    devld  
       2019-12-21 11:51:39 +08:00 via Android
    实现 WebMvcConfigurer 接口

    ```java
    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
    configurer.addPathPrefix("/api", c -> c.isAnnotationPresent(ApiController.class));
    }
    ```
    luozic
        11
    luozic  
       2019-12-21 11:52:42 +08:00
    nginx 可以玩 ip 白名单模式。
    luozic
        12
    luozic  
       2019-12-21 11:53:16 +08:00
    “现在要根据 IP 白名单控制后台页面的输出“ 这个才是真的需求。
    handsomezai
        13
    handsomezai  
    OP
       2019-12-21 11:57:08 +08:00
    @devld 大哥,正解,非常感谢!!!
    handsomezai
        14
    handsomezai  
    OP
       2019-12-21 12:01:18 +08:00
    感谢大家的回答,devld 的更符合我现在的需求,我这边也查到了一个,分享一下,
    //自动注入 spring boot 默认的上传配置
    @Autowired
    private MultipartConfigElement multipartConfigElement;
    @Autowired
    private DispatcherServlet dispatcherServlet;

    @Bean
    public ServletRegistrationBean apiServlet() {
    ServletRegistrationBean bean = new ServletRegistrationBean(dispatcherServlet);
    //注入上传配置到自己注册的 ServletRegistrationBean
    bean.addUrlMappings("/api/*");
    bean.setMultipartConfig(multipartConfigElement);
    bean.setName("apiServlet");
    return bean;
    }
    不过还是推荐使用 devld 用户的,实现 WebMvcConfigurer 接口的 configurePathMatch 接口
    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
    configurer.addPathPrefix("/api", c -> c.isAnnotationPresent(RestController.class) || c.isAnnotationPresent(Controller.class));
    }
    RestController 是接口的,Controller 里面包含的是验证码输出一类的视图
    handsomezai
        15
    handsomezai  
    OP
       2019-12-21 12:06:13 +08:00
    @luozic nginx 做 IP 白名单,动态的有点麻烦,不如直接使用项目中拦截控制,存到数据库,使用 redis 做缓存加速,因为这个后台是面向公司内部人员使用的最多 200 员工,三五年内用户变化可能小,所以后台并发性能这块不用特别注重。前端的接口我准备单独提出来,着重性能去做优化
    handsomezai
        16
    handsomezai  
    OP
       2019-12-21 13:43:36 +08:00
    @cedoo22 zuul 用不到,公司项目小,没必要整那么多服务^__^
    Vanes
        17
    Vanes  
       2020-03-02 15:24:03 +08:00
    @handsomezai 你这种方式的话,是不是带不带 /api 这个前缀都能访问到对应的接口哦?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5579 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 03:30 · PVG 11:30 · LAX 19:30 · JFK 22:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.