带有 MVC 的 Spring Boot SOAP Web 服务

Posted

技术标签:

【中文标题】带有 MVC 的 Spring Boot SOAP Web 服务【英文标题】:Spring Boot SOAP webservice with MVC 【发布时间】:2015-03-10 10:44:03 【问题描述】:

我想结合 Spring 指南中的两个 Spring (spring-boot) 应用程序:

https://spring.io/guides/gs/serving-web-content/ https://spring.io/guides/gs/producing-web-service/

很遗憾,这些示例不能一起使用。 servlet 调度程序存在问题。添加 dispatcherServlet bean 后 - MVC servlet 不工作(错误 404)。

@Bean
public ServletRegistrationBean dispatcherServlet(ApplicationContext applicationContext) 
    MessageDispatcherServlet servlet = new MessageDispatcherServlet();
    servlet.setApplicationContext(applicationContext);
    servlet.setTransformWsdlLocations(true);
    return new ServletRegistrationBean(servlet, "/ws/*");

如何配置 servlet dispatcher 才能正常工作?

我想要:

localhost:8080/ws/* - 网络服务 localhost:8080/web/* - MVC 组件

提前致谢!

【问题讨论】:

将方法重命名为messageDispatcherServlet而不是dispatcherServlet,后者会覆盖默认配置的DispatcherServlet 非常感谢!!!它正在工作 【参考方案1】:

问题在于MessageDispatcherServlet 的注册,因为名称dispatcherServlet 覆盖了Spring Boot 注册的DispatcherServlet。您网站的 MVC 部分需要后者。

要修复它,只需将您的方法重命名为 dispatcherServlet 以外的任何名称,例如 messageDispatcherServlet

@Bean
public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) 
    MessageDispatcherServlet servlet = new MessageDispatcherServlet();
    servlet.setApplicationContext(applicationContext);
    servlet.setTransformWsdlLocations(true);
    return new ServletRegistrationBean(servlet, "/ws/*");

【讨论】:

@m-deinum 我有一个类似的 MessageDispatcherServlet,但它被配置为使用 '/*' url 模式。我想添加一个 MVC servlet,它将回复“/ui”模式。我可以向 MessageDispatcherServlet 添加过滤器或其他东西,以便它首先检查“/ui”模式并委托,否则它将请求作为标准 SOAP 消息处理。谢谢 为什么需要过滤器? servlet 容器会为您处理这个问题,只需将服务器映射到正确的模式即可。

以上是关于带有 MVC 的 Spring Boot SOAP Web 服务的主要内容,如果未能解决你的问题,请参考以下文章

带有 Spring MVC 的 Vaadin 8 Spring Boot QuickTickets 仪表板

带有 Spring Boot 和 thymeleaf 的 Spring MVC 4 - i18n 无法正常工作

gradle + spring MVC + spring boot + jsp = 404错误?

Spring Boot调用SOAP Web Service

使用 CXF 生成 SOAP 1.2 端点的 Java Spring Boot

Spring-Boot + Spring-MVC + Thymeleaf + Apache Tiles