gpt4 book ai didi

spring - 如何在 Spring Boot 中同时公开 SOAP Web 服务和 RESTful API?

转载 作者:可可西里 更新时间:2023-11-01 16:28:00 24 4
gpt4 key购买 nike

在 Spring Boot 1.4.3 中,我公开了一个在端口 8080 上成功运行的 SOAP Web 服务端点。

为了运行健康检查,我还需要公开一个 RESTful API。我尝试同时使用执行器和休息 Controller :

@RestController
public class RESTapis {

@RequestMapping(method = {RequestMethod.GET, RequestMethod.POST}, value = "/health")
public String healthCheck() {
return "ACK";
}

}

但在这两种情况下,我都得到了相同的响应:HTTP 405(不允许的方法)

如果我禁用网络服务,REST api 将返回 HTTP 200。

如何让 SOAP 网络服务和 REST 同时工作?

这是网络服务配置:

@EnableWs
@Configuration
public class WebServiceConfig extends WsConfigurerAdapter {

@Bean
public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) {
MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setApplicationContext(applicationContext);
servlet.setTransformWsdlLocations(true);

return new ServletRegistrationBean(servlet, "/*");
}
}

最佳答案

因此关闭 messageDispatcherServlet 方法,由于通配符注册,您似乎将 servlet 绑定(bind)到所有传入请求:

return new ServletRegistrationBean(servlet, "/*");

因此 MessageDispatcher 正在拦截您所有传入的请求并尝试查找/health 并抛出 http 405。

修复:

return new ServletRegistrationBean(servlet, "/soap-api/*");

解释:

通过将 Message Dispatcher 绑定(bind)到特定的 URI 命名空间,我们可以确保所有在/soap-api/* 命名空间上激发的请求只会被 MessageDispatcher 拦截。所有其他请求都将被 DispatcherServlet 拦截,从而可以与您的 Soap WS 并行运行 Rest 接口(interface)。

建议:

不知道应用程序的原因/细节,但脱离方法 healthcheck() 的名称,您可以查看使用 spring boot actuator 为您的应用程序生成健康检查和指标。您也可以覆盖它以进行自定义。

执行器引用: https://spring.io/guides/gs/actuator-service/

关于spring - 如何在 Spring Boot 中同时公开 SOAP Web 服务和 RESTful API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41583354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com