当前位置: 首页 > 知识库问答 >
问题:

如何有Spring WebFludWebSocket路由作为注释?

祁远
2023-03-14

关于如何将SpringWebFlux Websocket作为注释的问题,请回答。

我正在从事一个Springboot Webflux Websocket项目,该项目处理restful api和Websocket。

要强调的是,这是一个单独的Spring网络流量项目。不是一个Springboot启动WebSocket,不是一个Springboot rSocket,不是一个Springboot酒吧子。

该项目如下:


@SpringBootApplication
public class EchoApplication {
    public static void main(String[] args) {
        SpringApplication.run(EchoApplication.class, args);
    }
}

@RestController
public class EchoController {
    @GetMapping(value = "/getEcho")
    public Mono<String> getEcho() {
        return Mono.just("echo");
    }
}

public class EchoHandler implements WebSocketHandler {
    @Override
    public Mono<Void> handle(WebSocketSession session) {
        return session.send( session.receive().map(msg -> "RECEIVED ON SERVER :: " + msg.getPayloadAsText()).map(session::textMessage));
    }
}

@Configuration
public class EchoConfiguration {

    @Bean
    public EchoHandler echoHandler() {
        return new EchoHandler();
    }

    @Bean
    public HandlerMapping handlerMapping() {
        Map<String, WebSocketHandler> map = new HashMap<>();
        map.put("/echo", echoHandler());
        SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
        mapping.setUrlMap(map);
        mapping.setOrder(Ordered.HIGHEST_PRECEDENCE);
        return mapping;
    }

    @Bean
    public WebSocketHandlerAdapter handlerAdapter() {
        return new WebSocketHandlerAdapter(webSocketService());
    }

    @Bean
    public WebSocketService webSocketService() {
        return new HandshakeWebSocketService(new ReactorNettyRequestUpgradeStrategy());
    }

}

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
    </dependencies>

如您所见,在这个项目中,有一个“传统”注释@GetMapping(value=“/getEcho”)。许多Spring项目使用这种样式,并将其作为注释公开(事件rscocket、发布/订阅等)

如何拥有:

 @Bean
    public HandlerMapping handlerMapping() {
        Map<String, WebSocketHandler> map = new HashMap<>();
        map.put("/echo", echoHandler());
        SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
        mapping.setUrlMap(map);

作为注解,某种@Websolket映射(/echo)将有助于呈现一种统一和更干净的方式来查看路线?

非常感谢。

共有1个答案

端木澄邈
2023-03-14

Spring Team目前不支持此功能,也没有计划支持基于路由的Web套接字。

 类似资料:
  • 路由是 Blade 中的核心,路由是一个 Http 请求处理的最小的最小单元,我们需要在程序中创建好 URL 和路由的映射关系。 在Blade中注册一个路由有2种方式,在下面我们详细讲解。 路由规则 在 Blade 的路由规则不是特别复杂,我们追求简洁与优雅,不希望把事情做的更麻烦。 所以路由规则分为这么几种: 静态路由 资源文件路由 Restful路由 静态路由是最容易理解的,也就是我写了 /h

  • 注解路由 新版本提供了一种最简单的路由注册方法(可以完成基本的路由定义),默认关闭,如果需要开启在应用的app.php配置文件中设置: // 使用注解路由 'route_annotation' => true, 然后只需要直接在控制器类的方法注释中定义(通常称之为注解路由),例如: <?php namespace app\index\controller; class

  • 问题内容: 是否有一个现有的库会将我的路由实例简化为路径数组? 范例 : 输出量 我可以编写一个减少代码的功能,用几行代码来解决这个问题,但是我想知道是否有一个现有的库可以帮我做到这一点,并照顾使用React Router表示路由的不同方式。 问题答案: 由于找不到任何东西,我最终为此创建了一个库… https://github.com/alansouzati/react-router-to- a

  • 是否有任何方法可以像durandal 2.0那样在angular中创建子路由器? 路由器将控制ngView中的内容。在ngView中,我想制作一些不同于路由器的子路由器,并在ngView中控制一些内容。 当childRouter更改时,整个网站的url都应该更改。 使用childRouter的原因是,不同的ngView中的childRouter不同,我需要组织它们。

  • 我已经使用FastAPI创建了一个简单的API,我正在尝试将URL作为任意的<code>路径</code>参数传递给FastAPI路由。 当我测试它时,它不起作用并抛出错误。我以这种方式测试它: