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

2018-11-21 11:16:19 +08:00
 brucefu

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

5042 次点击
所在节点    Java
15 条回复
gejun123456
2018-11-21 11:22:34 +08:00
写个 java main 函数 正则表达式 匹配替换
mineqiqi
2018-11-21 11:50:56 +08:00
如果所有的 controller 都是这个前缀开头,可以 server.servlet.context-path 加这个配置
brucefu
2018-11-21 12:00:32 +08:00
@mineqiqi 有用,如果只修改其中 20 个呢?我尝试使用继承的方式,无效果。
ClutchBear
2018-11-21 12:35:25 +08:00
我们这里的解决方式是:
定义一个静态变量 path=v1
这 20 个都用这个镜头变量拼接,
后面再需要改成 v2 的话, 只需要改 path 的赋值就行.
xiluo
2018-11-21 12:43:20 +08:00
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/*
```
zzlhr
2018-11-21 17:31:04 +08:00
zuul?
mebixus
2018-11-21 17:40:31 +08:00
咳咳,如果只有 20 个,并且不会频繁改动的话,在 idea 里 command+shift+R (快捷键可能不一样)在整个工程里搜索替换一下就可以了啊。
Guozi1989
2018-11-21 17:45:18 +08:00
20 个应该不多,一个个的加吧。如果全部要替换的话就是 `server.contextPath=/V1/*`
x7395759
2018-11-21 17:51:13 +08:00
对修改关闭,对拓展开放
StevenTong
2018-11-21 18:04:20 +08:00
整个工程替换就加 gateway 不是的话 批量替换
zek
2018-11-21 18:16:54 +08:00
@mebixus 没毛病
zjengjie
2018-11-21 19:26:40 +08:00
可以重写 RequestMappingHandlerMapping 的 registerHandlerMethod,在里面判断哪些 controller 需要修改,然后创建一个新的 RequestMappingInfo 代替原来的。
deweixu
2018-11-21 20:05:41 +08:00
用 nginx 反向代理,在 nginx 配置里加,手动加狗头。
ioiogoo
2018-11-22 08:59:02 +08:00
如果是全局的前缀的话,在配置文件里面加
server.servlet.path=/v1,适用于 spring boot
571726193
2018-11-23 15:37:21 +08:00
我记得继承是可以的 因为我上一家公司就是这样的 用继承解决的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/509936

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX