brucefu
V2EX  ›  Java

Sprng Boot 中,想在 20 个 Controller 的 @RequestMapping 中添加相同的前缀,有便捷的方法吗?

  •  
  •   brucefu · Nov 21, 2018 · 6511 views
    This topic created in 2911 days ago, the information mentioned may be changed or developed.

    eg:两个 RequestMapping"/table""/user"。想同一改成"/v1/table""/v1/user"

    15 replies  •  2018-11-23 15:37:21 +08:00
    gejun123456
    gejun123456
    Nov 21, 2018
    1
    写个 java main 函数 正则表达式 匹配替换
    mineqiqi
    mineqiqi
    Nov 21, 2018❤️1
    2
    如果所有的 controller 都是这个前缀开头,可以 server.servlet.context-path 加这个配置
    brucefu
    brucefu
    OP
    Nov 21, 2018
    3
    @mineqiqi 有用,如果只修改其中 20 个呢?我尝试使用继承的方式,无效果。
    ClutchBear
    ClutchBear
    Nov 21, 2018
    4
    我们这里的解决方式是:
    定义一个静态变量 path=v1
    这 20 个都用这个镜头变量拼接,
    后面再需要改成 v2 的话, 只需要改 path 的赋值就行.
    xiluo
    xiluo
    Nov 21, 2018
    5
    https://stackoverflow.com/questions/28006501/how-to-specify-prefix-for-all-controllers-in-spring-boot

    You can provide a mapping to root context path of your spring boot application to /api/* in your custom configuration.
    ```java
    import org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration;
    import org.springframework.boot.context.embedded.ServletRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.DispatcherServlet;

    @Configuration
    public class DispatcherServletCustomConfiguration {

    @Bean
    public DispatcherServlet dispatcherServlet() {
    return new DispatcherServlet();
    }

    @Bean
    public ServletRegistrationBean dispatcherServletRegistration() {
    ServletRegistrationBean registration = new ServletRegistrationBean(
    dispatcherServlet(), "/api/");
    registration.setName(DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME);
    return registration;
    }
    }

    ```
    or add this to your application.properties in src\main\resources folder
    ```
    server.contextPath=/api/*
    ```
    sss007
    sss007
    Nov 21, 2018
    6
    zuul?
    mebixus
    mebixus
    Nov 21, 2018❤️1
    7
    咳咳,如果只有 20 个,并且不会频繁改动的话,在 idea 里 command+shift+R (快捷键可能不一样)在整个工程里搜索替换一下就可以了啊。
    Guozi1989
    Guozi1989
    Nov 21, 2018
    8
    20 个应该不多,一个个的加吧。如果全部要替换的话就是 `server.contextPath=/V1/*`
    quickma
    quickma
    Nov 21, 2018
    9
    对修改关闭,对拓展开放
    StevenTong
    StevenTong
    Nov 21, 2018
    10
    整个工程替换就加 gateway 不是的话 批量替换
    zek
    zek
    Nov 21, 2018 via Android
    11
    @mebixus 没毛病
    zjengjie
    zjengjie
    Nov 21, 2018❤️1
    12
    可以重写 RequestMappingHandlerMapping 的 registerHandlerMethod,在里面判断哪些 controller 需要修改,然后创建一个新的 RequestMappingInfo 代替原来的。
    deweixu
    deweixu
    Nov 21, 2018
    13
    用 nginx 反向代理,在 nginx 配置里加,手动加狗头。
    ioiogoo
    ioiogoo
    Nov 22, 2018
    14
    如果是全局的前缀的话,在配置文件里面加
    server.servlet.path=/v1,适用于 spring boot
    571726193
    571726193
    Nov 23, 2018
    15
    我记得继承是可以的 因为我上一家公司就是这样的 用继承解决的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1136 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 23:20 · PVG 07:20 · LAX 15:20 · JFK 18:20
    ♥ Do have faith in what you're doing.