如何解决SwaggerFox不支持WebSocket
我正在尝试在我的项目中启用SwaggerUI,但我发现如果我也启用了WebSocket,它将无法正常工作。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
@Configuration
public class SwaggerConfiguration {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.example.app.web.rest"))
.paths(PathSelectors.any())
.build();
}
}
使用该配置就可以了,我可以看到所有API都有文档记录,但是我还公开了WebSocket端点(与REST API不同的程序包)
@Controller
@RequestMapping("/")
class ChatController {
private final SimpMessagingTemplate messagingTemplate;
private final ChatService chatService;
public ChatController(SimpMessagingTemplate messagingTemplate,ChatService chatService) {
this.messagingTemplate = messagingTemplate;
this.chatService = chatService;
}
@MessageMapping("/chat/send")
public void sendChatMessage(@Payload InboundChatMessage inboundMessage) {
//
}
}
它是以这种方式配置的,WebSocketConnectionFilter
正在实现ChannelInterceptor
并覆盖preSend()
,但这不是问题,我在此方法中有断点,并且在任何时候都不会被调用我尝试访问SwaggerUI。
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer {
private final WebSocketConnectionFilter webSocketConnectionFilter;
public WebSocketConfiguration(WebSocketConnectionFilter webSocketConnectionFilter) {
this.webSocketConnectionFilter = webSocketConnectionFilter;
}
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic","/queue","/user");
config.setApplicationDestinationPrefixes("/app");
config.setUserDestinationPrefix("/user");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("*").setAllowedOrigins("http://localhost:4200").withSockJS();
registry.addEndpoint("/ws").setAllowedOrigins("http://localhost:4200").withSockJS();
}
@Override
public void configureClientInboundChannel(ChannelRegistration registration) {
registration.interceptors(webSocketConnectionFilter);
}
}
无论如何,如果我保持启用WebSocket配置并尝试访问http://localhost:8080/swagger-ui/index.html#/
,我将获得HTTP 404,并且可以在应用程序日志中看到
2020-11-08 09:44:53.742警告13284 --- [nio-8080-exec-1] o.s.w.s.s.t.h.DefaultSockJsService:无效的SockJS路径 '/swagger-ui/index.html'-必须具有3个路径段
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。