我想问一下是否有可能(以及如何)为静态内容和spring引导应用程序中的端点设置不同的前缀。我一直在应用程序属性中使用server.servlet.contextPath=/api
,但它也设置了静态内容的前缀。
我想实现的是拥有"/api"控制器中端点的前缀,并从"/"根。
实际上,我需要的是能够将静态内容设置为"/"应用程序的其他部分可以在"/api">
Spring Boot为web应用程序使用内置的WebMvcAutoConfigurationAdapter
。默认行为在这个类中定义。
我假设你的控制器用@RestController
注释。如果是这种情况,你可以将所有控制器映射到不同的位置。
创建一个实现WebMvcConfigurer
接口的配置类。覆盖configurePathMatch(PathMatchConfigurer configurer)
方法并实现所需的路径配置。
在下面的示例中,静态内容仍将以"/"并且所有REST端点都可以使用"/api"作为前缀。
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.method.HandlerTypePredicate;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer.addPathPrefix("/api", HandlerTypePredicate.forAnnotation(RestController.class));
}
}
你会注意到在这个类中没有@EnableWebMvc
注释,因为它会禁用WebMvc
的Spring Boot自动配置机制。