java - Spring Boot Controller 路径扩展了另一条路径

标签 java spring spring-boot spring-mvc

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

/{语言}/{子系统}/blah/blah

语言子系统变量将执行一些通用逻辑并适用于所有100多个 Controller ,我想问的是而不是在每个 Controller 中重复这个通用逻辑100次,有没有办法定义像这样的集中 Controller

/{语言}

用于处理语言逻辑和另一个集中 Controller ,例如

/{子系统}

哪个是处理子系统逻辑和所有其他 Controller 的“扩展”这些 Controller ? 希望我描述清楚。非常感谢,周末愉快:)

最佳答案

你可以考虑写一个custom Interceptor为您的应用程序。该拦截器可以从您的 URL 路径获取语言子系统部分,并在中央位置调用您的通用逻辑。

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

  1. 这是非常隐晦的 - 人们可能会错过你的拦截器已经就位,并且可能会带来惊喜
  2. 它将适用于所有传入请求 - 如果您希望它跳过某些请求,则必须在拦截器中实现此逻辑

就我个人而言,我会采取另一种方法并选择 @RequestMapping and @PathVariable 的组合。每个 Controller 方法上的注释以捕获语言子系统并将通用逻辑放入辅助方法中:

@GetMapping("/{language}/{subsystem}/something")
public String doSomething(@PathVariable Language language, @PathVariable Subsystem subsystem) {
    LanguageSubsystemHelper.doSomething(language, subsystem);
    // ...
}

通过提供可用于所有 Controller 方法的帮助器,将重复次数减少到最低限度。这种方法的好处是:

  1. 您可以精细控制何时使用或不使用通用逻辑
  2. 很明确
  3. 您可以通过将路径变量绑定(bind)到枚举来自动验证语言子系统

关于java - Spring Boot Controller 路径扩展了另一条路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58991826/

相关文章:

java - Android 电子邮件验证 : conditions for characters after "."

java - 从 Android 的 Jersey Resftul Web 服务传递和接收 JSON 对象

spring - Spring Boot Test 如何保持多个测试套件的上下文?

java - 在 Javamail 中不显示附件

java - 找不到名称为 'runtime' 的 org.springframework.boot 配置

java - 使用java通过http循环流式传输音乐

java - 如何修复接收对象数组的静态泛型方法

spring - GWT Spring 安全集成(纯 GWT,无 JSP)

java - 在应用程序启动时缓存查找不起作用

java - Postman 和 RestTemplate 的 API 调用中的主体参数相同,但只有 Postman 有效