求助! springboot 如何获取 url 上的参数,@PathVariable 复用问题

2021-05-26 10:43:18 +08:00
 Aliberter

现在工作中有这样一个需求,需要我把 c#的一个项目里的接口都转成 java 实现。这些接口都有共同的请求规则:/{controller}/{action}/{apiVersion}/{userId}/{clientName},举例子比如: http://127.0.0.1:8080/home/index/6.0.0/0/Any. 前面两个参数是 controller 名和方法名,这个我都可以在 @RequestMapping 里写死,但是后面的 apiVersion 、userId 、clientName 这些参数,我不可能在每个 controller 方法的注解上都写上占位符然后用 @PathVariable 获取吧,太 low 了,后期想统一维护都没法维护,而且这些参数要求如果 url 里没有的话要赋默认值。所以问问大佬们,springboot 中如何有没有更好的实现方式呢?无论是拦截器、aop,想来想去都没有太明确的思路。

原 c#项目里是用路由实现的,这样配置后都会自动去找 controller 里的方法,并且给方法入参赋(默认)值:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{apiVersion}/{userId}/{clientName}",
    defaults: new
    {
    controller = "Home",
    action = "Index",
    apiVersion = "6.0.0",
    userId = "0",
    clientName = ClientNames.Any
    }
});

我现在写出来只能是这样的,但我不能 200 多个接口都这样写吧:

@RestController
@RequestMapping("/home")
public class HomePageController {

    @RequestMapping("/index/{apiVersion}/{userId}/{clientName}")
    public IndexResponse index(@PathVariable("apiVersion") String apiVersion,
                               @PathVariable("userId") String userId,
                               @PathVariable("clientName") String clientName) {
        return null;
    }
}

真有大佬能提供解决思路,我愿意有偿哈~多谢了

3525 次点击
所在节点    Java
24 条回复
actar
2021-05-26 16:42:37 +08:00
MjEwMDY3MTgxMUBxcS5jb20=
这是支付宝,也是邮箱。
有问题可以多多交流。
@Aliberter
jorneyr
2021-05-26 16:56:49 +08:00
这不就是另一个 ServletDispatcher 吗?用拦截器然后再处理吧。
bringyou
2021-05-27 18:18:03 +08:00
可以用 #14 的 model attribute
如果路径上的值跟变量名一样,可以省略 @PathVariable 的括号
MarioLuo
2021-05-28 07:45:43 +08:00

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

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

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

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

© 2021 V2EX