为一些java spring boot控制器添加前缀

问题描述 投票:0回答:1

有没有办法向一组 od 控制器添加前缀,而使其余控制器不包含此前缀 示例:

@Slf4j
@RestController
@AllArgsConstructor
@RequestMapping(value = "/families")
@RolesGuard(role = {Roles.Manager, Roles.Employee})
public class MyController {
    ...
}

我已经使用

context-path
添加了整个应用程序的全局前缀,但我想要为此控制器和同一包的其他控制器添加自定义前缀,而不影响其余控制器,而不添加
@RequestMapping(value = "/prefix/families")
例如,每个控制器都知道我的控制器根据其功能分为几个包(产品、供应商……)

java spring-boot api controller prefix
1个回答
0
投票

我通过像配置类一样简单的解决方案解决了这个问题。

  • 第 1 步:创建
    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) {
        
    }
}
  • 第 2 步:使用配置器添加路径前缀,如下所示:
    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
进行访问,当然我们不能忘记需要添加的全局前缀到所有端点。

© www.soinside.com 2019 - 2024. All rights reserved.