Spring Boot中的多个servlet映射

时间:2016-03-14 23:32:57

标签: spring spring-mvc spring-boot

有没有办法通过属性'context-path'为同一个Spring Boot MVC应用程序设置多个映射?我的目标是避免为uri映射创建许多'Dispatcherservlet'。

例如:

servlet.context-path =/, /context1, context2

3 个答案:

答案 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;
    }