现在工作中有这样一个需求,需要我把 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;
}
}
真有大佬能提供解决思路,我愿意有偿哈~多谢了
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.