【发布时间】:2018-08-10 07:50:40
【问题描述】:
有一个结合了 WS 和 MVC 的 Spring Boot 应用程序。我的问题是如何将 WS 请求和 MVC 请求路由到不同的调度程序 servlet。这是一个代码sn-p:
(不工作):
@Configuration
public class WebServicesConfiguration extends WsConfigurerAdapter implements WebApplicationInitializer {
@Bean
public ServletRegistrationBean messageDispatcherServlet(ApplicationContext context) {
MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setApplicationContext(context);
servlet.setTransformWsdlLocations(true);
return new ServletRegistrationBean(servlet, "/*");
}
@Bean
public SimpleUrlHandlerMapping simpleUrlHandlerMapping() {
SimpleUrlHandlerMapping handler = new SimpleUrlHandlerMapping();
handler.setDefaultHandler("mvc");
return handler;
}
@Override
public void onStartup(ServletContext servletContext) {
DispatcherServlet ds = new DispatcherServlet(new GenericWebApplicationContext());
ServletRegistration.Dynamic appServlet = servletContext.addServlet("mvc", ds);
appServlet.addMapping("/dummy");
}
}
WS 使用'/*' 映射。此示例中的 MVC 使用 '/dummy' 映射。问题是 MVC 请求转到 WS 调度程序 servlet。我尝试使用 SimpleUrlHandlerMapping 将 MVC 请求路由到 MVC 调度程序 servlet,但它没有帮助。不允许更改 WS 的映射。
附:上面有一个错误。 WS 映射是'/'
【问题讨论】:
-
将
DispatcherServlet映射到/*并将MessageDispatcherServlet映射到/services/*之类的东西。另外/dummy表示/dummy而不是/dummy/123等那些去WS 的。如果你使用/*作为DispatcherServlet映射你可以使用默认的spring boot配置一个,只需要配置MessageDispatcherServlet。 -
我不是想帮你,但我真的很想知道你为什么不使用不同的控制器? WS 的 restController 和 MVC 的普通控制器 ..
-
正如我所写,更改 MessageDispatcherServlet 映射是不可能的。我只能玩 mvc 映射。
标签: java spring spring-mvc spring-ws