Spring 引导 - REST 和 SOAP 组合
Spring Boot - REST and SOAP combination
我需要编写一个如下所示的应用程序:
我可以 POST 一个 soap 文档到 /a/abc,通常的 SOAP 方式。
我可以得到 /a/abc,return 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 控制器会正确处理 GET 请求,但如果我将 SOAP bean 留在那里,我会收到“405 / Method Not Allowed”。
这些可以共存并让 Rest 控制器处理 GET,而 POST 处理 SOAP 方式吗?或者有别的办法吗?
我没能找到这个问题的答案,但我有一个解决方法:
- 将其余控制器移动到不同的 url 上下文(例如 /b/abc)。
- 将nginx放在应用程序前面
- 让 nginx 将 "GET /a/abc" 的请求重写为 "GET /b/abc"。
到目前为止,这似乎可以满足我的需要。可能有多种方法可以做到这一点,但我无法使用内置的 tomcat 来解决这个问题,而 nginx 方法将重定向保持在应用程序外部。
我需要编写一个如下所示的应用程序:
我可以 POST 一个 soap 文档到 /a/abc,通常的 SOAP 方式。
我可以得到 /a/abc,return 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 控制器会正确处理 GET 请求,但如果我将 SOAP bean 留在那里,我会收到“405 / Method Not Allowed”。
这些可以共存并让 Rest 控制器处理 GET,而 POST 处理 SOAP 方式吗?或者有别的办法吗?
我没能找到这个问题的答案,但我有一个解决方法:
- 将其余控制器移动到不同的 url 上下文(例如 /b/abc)。
- 将nginx放在应用程序前面
- 让 nginx 将 "GET /a/abc" 的请求重写为 "GET /b/abc"。
到目前为止,这似乎可以满足我的需要。可能有多种方法可以做到这一点,但我无法使用内置的 tomcat 来解决这个问题,而 nginx 方法将重定向保持在应用程序外部。