Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring引导控制器路径扩展另一个路径_Java_Spring_Spring Boot_Spring Mvc - Fatal编程技术网

Java Spring引导控制器路径扩展另一个路径

Java Spring引导控制器路径扩展另一个路径,java,spring,spring-boot,spring-mvc,Java,Spring,Spring Boot,Spring Mvc,我们有一个具有如下路径模式的应用程序: /{language}/{subsystem}/blah/blah 语言和子系统变量将执行一些公共逻辑,并应用于所有100多个控制器,我想问的是,有没有办法在每个控制器中重复此公共逻辑100次 /{language} 这是为了处理语言逻辑和另一个集中式控制器,如 和/{subsystem} 哪个是处理子系统逻辑和从这些控制器扩展的所有其他控制器? 希望我能描述清楚。非常感谢,周末快乐:)您可以考虑为您的应用程序编写一个。这个拦截器可以从URL路径中获取语言

我们有一个具有如下路径模式的应用程序:

/{language}/{subsystem}/blah/blah

语言
子系统
变量将执行一些公共逻辑,并应用于所有100多个控制器,我想问的是,有没有办法在每个控制器中重复此公共逻辑100次

/{language}

这是为了处理语言逻辑和另一个集中式控制器,如

/{subsystem}

哪个是处理子系统逻辑和从这些控制器扩展的所有其他控制器?
希望我能描述清楚。非常感谢,周末快乐:)

您可以考虑为您的应用程序编写一个。这个拦截器可以从URL路径中获取
语言
子系统
部分,并在中心位置调用公共逻辑

这种方法有几个陷阱,您应该仔细权衡:

  • 这是非常含蓄的-人们可能会错过你的拦截器已经就位,可能会有惊喜
  • 它将应用于所有传入请求-如果您希望它跳过某些请求,则必须在拦截器中实现此逻辑
  • 就我个人而言,我会采取另一种方法,在每个控制器方法上进行注释组合,以捕获
    语言
    子系统
    ,并将公共逻辑放入辅助方法中:

    @GetMapping(“/{language}/{subsystem}/something”)
    公共字符串doSomething(@PathVariable语言,@PathVariable子系统){
    LanguageSubsystemHelper.doSomething(语言,子系统);
    // ...
    }
    
    通过提供可用于所有控制器方法的帮助器,将重复次数减少到最小。这种方法的好处是:

  • 您可以精确控制何时使用或不使用公共逻辑
  • 这是明确的
  • 通过将路径变量绑定到枚举,可以自动验证
    语言
    子系统

  • 用“/language”设置什么样的逻辑?我不确定,但如果您只是想删除相同类型URL的冗余调用,那么请使用“nginx”这类有助于URL分支的工具。