如何在Spring Boot 2.0.0.M2中的@Bean方法中注册RouterFunction?

时间:2017-06-27 07:11:45

标签: java spring spring-boot spring-webflux

我正在使用Spring 5的功能,我在注册RouterFunction时遇到了一些问题,它将被读取,但不会被映射。 (通过在方法中抛出异常来尝试。)

@Configuration
@RequestMapping("/routes")
public class Routes {
  @Bean
  public RouterFunction<ServerResponse> routingFunction() {
    return RouterFunctions.route(RequestPredicates.path("/asd"), req -> ok().build());
  }
}

转到/routes/asd结果是404,有关我做错的任何线索? (我也试过没有这个@RequestMapping/routes,它也为/asd返回了404

2 个答案:

答案 0 :(得分:5)

我发现了这个问题。

我的pom.xml中有这些依赖项:

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

删除了spring-boot-starter-web依赖项,并且webflux开始正常工作。

另一种解决方案是保持Web依赖性并排除tomcat,以便netty开始工作:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

答案 1 :(得分:2)

当您想要使用Webflux时,无需添加spring-boot-starter-web,只需将spring-boot-starter-webflux添加到项目依赖项中即可。

对于您的代码,如果您想使用纯@RequestMapping("/routes"),请移除RouterFunction。并且您的routingFunction bean没有指定将使用哪种HTTP方法。

来自我的github的工作示例代码:

@Bean
public RouterFunction<ServerResponse> routes(PostHandler postController) {
    return route(GET("/posts"), postController::all)
        .andRoute(POST("/posts"), postController::create)
        .andRoute(GET("/posts/{id}"), postController::get)
        .andRoute(PUT("/posts/{id}"), postController::update)
        .andRoute(DELETE("/posts/{id}"), postController::delete);
}

查看完整代码:https://github.com/hantsy/spring-reactive-sample/tree/master/boot-routes

如果您坚持传统的@RestController@RequestMapping,请查看另一个示例:https://github.com/hantsy/spring-reactive-sample/tree/master/boot