2017-06-27 3 views
2

私はSpring 5の機能を使いこなしていますが、RouterFunctionという登録に問題がありますが、読み込まれますがマッピングされません。 (メソッドで例外をスローすることによってしようとしました。)Spring Boot 2.0.0.M2の@BeanメソッドでRouterFunctionを登録するには?

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

は404で/routes/asd結果に行く、私が間違ってやっている上の任意の手がかりを? (私も/routesにこの@RequestMappingせずに試してみました、それはまた/asdのための404を返した)

+0

' RequestMappingは 'RouterFunction'マッピングに影響を与えるべきではありません。あなたの 'Configuration'クラスがSpringコンポーネントスキャナによって選択されているという事実は確かですか?プロジェクトの構造と可能な 'build.gradle' /' pom.xml'に関する情報を投稿してください。 'RequestMapping'を除いて、あなたの' RouterFunction'はうまくいくようです –

+0

SpringApplication.run(TestfluxApplication.class、args)を呼び出す単純なメインクラスが '@SpringBootApplication'でアノテーションされています。 もう1つのクラスは、上記の「ルート」クラスです。 pom.xmlは、spring-boot-starter-parentを親として使用しています。それには依存関係としてのspring-boot-starter-webとspring-boot-starter-webfluxがあります。私が '@RestController'で新しいクラスを追加すると、それは取得され、そのクラス内のマッピングが適用され、アクセス可能になります。 –

+0

このルーティング方法では例外がスローされましたが、スタックトレースは次のようになります。 https://pastebin.com/raw/44Bh7yv2 (私はそれが選ばれたと思います) –

答えて

2

私は問題を発見しました。

私は両方の私の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> 

は、ばねブートスターター・ウェブの依存関係とwebfluxが正常に動作し始め削除。

別の解決策は、網状の仕事を始めたので、ウェブの依存関係を維持し、Tomcatを除外することでした:

<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

ありませんが、あなたがWebfluxを使用する場合、spring-boot-starter-webを追加するだけで、プロジェクトの依存関係にspring-boot-starter-webfluxを追加する必要があります。

純正RouterFunctionを使用する場合は、コードには@RequestMapping("/routes")を削除してください。 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); 
} 

からの完全なコードをチェックしてください:あなたは@RestController伝統と@RequestMappingに固執している場合は、https://github.com/hantsy/spring-reactive-sample/tree/master/boot-routes

別のサンプルをご確認ください:https://github.com/hantsy/spring-reactive-sample/tree/master/boot

関連する問題