我需要编写一个如下所示的应用程序:
我可以将 soap 文档发布到/a/abc,这是通常的 SOAP 方式。
我可以获取/a/abc,并返回 200/Ok。这只是一个测试,看看该方法是否存在。
执行此操作的正确方法是什么?我还没有看到在 SOAP 上下文中执行 GET 的方法。我已尝试按如下方式创建 REST 和 SOAP bean:
@Bean
public ServletRegistrationBean WsRegistrationBean(ApplicationContext applicationContext) {
MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setApplicationContext(applicationContext);
servlet.setTransformWsdlLocations(true);
return new ServletRegistrationBean(servlet, "/a/*");
}
@Bean
public ServletRegistrationBean RsRegistrationBean(ApplicationContext applicationContext) {
DispatcherServlet servlet = new DispatcherServlet();
servlet.setApplicationContext(applicationContext);
return new ServletRegistrationBean(servlet, "/a/*");
}
但是这不起作用,SOAP bean 似乎赢了。如果我注释掉 soap bean,我的 REST Controller 会正确处理 GET 请求,但如果我将 SOAP bean 留在那里,我会收到“405/Method Not Allowed”。
这些可以共存并让 Rest Controller 处理 GET,而 POST 处理 SOAP 方式吗?还是有别的办法?
最佳答案
我没能找到这个问题的答案,但我有一个解决方法:
- 将其余 Controller 移动到不同的 url 上下文(例如/b/abc)。
- 将nginx放在应用程序前面
- 让 nginx 将请求“GET/a/abc”重写为“GET/b/abc”。
到目前为止,这似乎可以满足我的需求。可能有多种方法可以做到这一点,但我无法通过内置的 tomcat 解决这个问题,而 nginx 方法将重定向保持在应用程序外部。
关于java - Spring Boot - REST 和 SOAP 组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30092553/