有没有办法通过属性'context-path'为同一个Spring Boot MVC应用程序设置多个映射?我的目标是避免为uri映射创建许多'Dispatcherservlet'。
例如:
servlet.context-path =/, /context1, context2
答案 0 :(得分:0)
您可以使用'server.contextPath'属性占位符来设置整个Spring启动应用程序的上下文路径。 (例如server.contextPath=/live/path1
)
此外,您可以设置将应用于所有方法的类级别上下文路径,例如:
@RestController
@RequestMapping(value = "/testResource", produces = MediaType.APPLICATION_JSON_VALUE)
public class TestResource{
@RequestMapping(method = RequestMethod.POST, value="/test", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<TestDto> save(@RequestBody TestDto testDto) {
...
使用此结构,您可以使用/live/path1/testResource/test
执行save
方法。
答案 1 :(得分:0)
您只需要一个Dispatcherservlet,其根根上下文路径设置为您想要的(可以是/
或mySuperApp
)。
通过声明多个@RequestMaping,您将能够使用相同的DispatcherServlet提供不同的URI。
这是一个例子。使用/mySuperApp
和@RequestMapping("/service1")
将DispatcherServlet设置为@RequestMapping("/service2")
会暴露以下端点:
/mySuperApp/service1
/mySuperApp/service2
为单个servket提供多个上下文不是Servlet规范的一部分。单个servlet无法从多个上下文中提供服务。
您可以做的是将多个值映射到请求映射。
@RequestMapping({“/ context1 / service1}”,{“/ context2 / service1}”)
我没有看到任何其他方法。
答案 2 :(得分:0)
您可以创建返回@Bean
的{{1}}带注释的方法,并在那里添加多个映射。这是更好的方式,因为Spring Boot鼓励Java配置而不是配置文件:
ServletRegistrationBean
在应用程序启动时,您将能够在日志中看到:
@Bean
public ServletRegistrationBean myServletRegistration()
{
String urlMapping1 = "/mySuperApp/service1/*";
String urlMapping2 = "/mySuperApp/service2/*";
ServletRegistrationBean registration = new ServletRegistrationBean(new MyBeautifulServlet(), urlMapping1, urlMapping2);
//registration.set... other properties may be here
return registration;
}