2017-12-08 18 views
1

Spring WebFluxと反応的なスタイルでMongoデータベースにユーザーを保存しようとしましたが、データが保存されないため、Java 8、Spring 5、mongodbがあります。Spring 5のmongodbにユーザーを保存できませんWebFlux

これは私の設定です:

マイエンティティ:

@Document 
public class User { 
    @Id 
    private String id; 
    private String username; 
    private String password; 
} 

マイリポジトリ:

public interface UserRepository extends ReactiveMongoRepository<User, String> { 
} 

私のWeb構成:

@Configuration 
@EnableWebFlux 
public class WebConfig { 

    @Autowired 
    private UserRepository userRepository; 

    @Bean 
    public RouterFunction userRoutes() { 
     return route(POST("/admin/users").and(accept(APPLICATION_JSON)), 
         request -> { 
          Mono<User> user = request.bodyToMono(User.class); 
          Mono<User> userMono = user.doOnNext(userRepository::save) 
          return ServerResponse.().body(userMono, User.class); 
         }); 
    } 
} 

が、私はマニュアルを持っていることかもしれrepに保存した後にsubscribeを実行する私は春のリファレンスでそのような情報を見つけられませんでしたか?

UPD: しかし、私は、要求ユーザーから抽出しuserRepositoryに渡し、私はMongoのためにデータを保存するために成功した結果を持っている結果を返す場合。しかし、私はそれが良いアプローチであることを確認していない:

@Bean 
public RouterFunction userRoutes() { 
    return route(POST("/admin/users").and(accept(APPLICATION_JSON)), 
        request -> { 
         User user = request.bodyToMono(User.class).block(); 
         Mono<User> userMono = userRepository.save(user); 
         return ServerResponse.ok().body(userMono, User.class); 
        }); 
} 

答えて

1

私はflatMapにdoOnNextを変更して、それが動作しますが、それは私には思われるので、これは「非同期このモノによって放出されたアイテムを変換するという事実によるものです、別のMonoから放出された値を返す "とdoOnNext - " Monoがデータを正常に出力したときにトリガされる動作を追加 "し、userRepository.save(...)メソッドはdoOnNextを元Monoに追加して返すモノを返しますsaveメソッドからの応答)、flatMapは保存メソッドから取得した新しいMonoを返します。

@Bean 
public RouterFunction userRoutes() { 
    return route(POST("/admin/users").and(accept(APPLICATION_JSON)), 
        request -> { 
         Mono<User> user = request.bodyToMono(User.class); 
          Mono<User> userMono = user.flatMap(userRepository::save); 
          return ServerResponse.status(HttpStatus.CREATED).body(userMono, User.class); 
        }); 
} 
関連する問題