Jav*_*ide 2 rest spring web-services http spring-boot
在 Spring Boot 1.4.3 中,我公开了一个在端口 8080 上成功运行的 SOAP Web 服务端点。
为了运行健康检查,我还需要公开一个 RESTful API。我尝试使用 Actuator 和 rest 控制器:
@RestController
public class RESTapis {
@RequestMapping(method = {RequestMethod.GET, RequestMethod.POST}, value = "/health")
public String healthCheck() {
return "ACK";
}
}
Run Code Online (Sandbox Code Playgroud)
但在这两种情况下,我都得到相同的响应:HTTP 405 (method not allowed)。
如果我禁用 Web 服务,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, "/*");
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
因此,关闭 messageDispatcherServlet 方法,由于通配符注册,您似乎将 servlet 绑定到所有传入请求:
return new ServletRegistrationBean(servlet, "/*");
Run Code Online (Sandbox Code Playgroud)
因此 MessageDispatcher 正在拦截您所有传入的请求并尝试找到 /health 并抛出 http 405。
使固定:
return new ServletRegistrationBean(servlet, "/soap-api/*");
Run Code Online (Sandbox Code Playgroud)
解释:
通过将 Message Dispatcher 绑定到特定的 URI 命名空间,我们可以确保在 /soap-api/* 命名空间上触发的所有请求只会被 MessageDispatcher 拦截。并且所有其他请求都将被 DispatcherServlet 拦截,从而可以与您的 Soap WS 并行运行 Rest 接口。
建议:
不知道应用程序的原因/细节,但不知道方法 healthcheck() 的名称,您可以查看使用 spring boot 执行器为您的应用程序生成健康检查、指标。您还可以覆盖它以进行自定义。
执行器参考: https : //spring.io/guides/gs/actuator-service/
归档时间: |
|
查看次数: |
1836 次 |
最近记录: |