有没有办法向一组 od 控制器添加前缀,而使其余控制器不包含此前缀 示例:
@Slf4j
@RestController
@AllArgsConstructor
@RequestMapping(value = "/families")
@RolesGuard(role = {Roles.Manager, Roles.Employee})
public class MyController {
...
}
我已经使用
context-path
添加了整个应用程序的全局前缀,但我想要为此控制器和同一包的其他控制器添加自定义前缀,而不影响其余控制器,而不添加 @RequestMapping(value = "/prefix/families")
例如,每个控制器都知道我的控制器根据其功能分为几个包(产品、供应商……)
我通过像配置类一样简单的解决方案解决了这个问题。
Configuration
类:package com.example.configurations;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class PrefixConfiguration implements WebMvcConfigurer {
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
}
}
configurer.addPathPrefix(
"/products", handler -> handler
.getPackage()
.getName()
.startsWith("com.example.products")
);
完整代码将是:
package com.example.configurations;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class PrefixConfiguration implements WebMvcConfigurer {
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer.addPathPrefix(
"/products", handler -> handler
.getPackage()
.getName()
.startsWith("com.example.products")
);
}
}
这将为 com.example.products 包中的所有控制器添加前缀
/products
,因此之前的路由 /families
现在将作为 /products/families
进行访问,当然我们不能忘记需要添加的全局前缀到所有端点。