java - Spring Boot - REST 和 SOAP 组合

标签 java spring rest soap spring-boot

我需要编写一个如下所示的应用程序:

  1. 我可以将 soap 文档发布到/a/abc,这是通常的 SOAP 方式。

  2. 我可以获取/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 方式吗?还是有别的办法?

最佳答案

我没能找到这个问题的答案,但我有一个解决方法:

  1. 将其余 Controller 移动到不同的 url 上下文(例如/b/abc)。
  2. 将nginx放在应用程序前面
  3. 让 nginx 将请求“GET/a/abc”重写为“GET/b/abc”。

到目前为止,这似乎可以满足我的需求。可能有多种方法可以做到这一点,但我无法通过内置的 tomcat 解决这个问题,而 nginx 方法将重定向保持在应用程序外部。

关于java - Spring Boot - REST 和 SOAP 组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30092553/

相关文章:

java - BiMap单个函数将值转换为连接的字符串值?

java - 将 FrameLayout 放在 WebView 之上?

java - AppBundler 未正确捆绑 JRE 8 预览版

java - Spring MVC - 如何在下载开始前显示消息

java - Redis 中的范围查询 - Spring Data Redis

java - Hsqldb存储过程

c# - 在 C# 中使用 wcf 将 web url 作为参数传递到 web 服务中

java - 填充Listview时Arraylist和Hashmap的问题

java - 如何将@RequestParam 映射到对象?

java - 如何在超时的情况下在 ReSTLet 中调用异步 HTTP 客户端