2017-11-11 4 views
0

Spring Webflux + MongoDB에서 간단한 프로젝트로 시작합니다.Spring webflux, mongodb : 문서가 데이터베이스에 저장되지 않았습니다.

은이 코드는 데이터베이스에 개체 사용자를 저장하는 이유 어려움을 이해하고 있습니다

@Controller 
@RequestMapping("/users") 
public class UserController { 
    @RequestMapping(value="/signup", method = RequestMethod.POST) 
     @ResponseBody Mono<User> save(@ModelAttribute(value="user") User user){ 
      return reactiveUserRepository.save(user); 
     } 
    } 
} 

을하고 나는이와 위의 기능을 교체 할 때 :

@RequestMapping(value="/signup", method = RequestMethod.POST) 
    String save(@ModelAttribute(value="user") User user){ 
     reactiveUserRepository.save(user); 
     return "login"; 
    } 

문서가 전혀 저장되지 않습니다.

2017-11-11 14:20:29.654 DEBUG 2828 --- [ctor-http-nio-2] o.s.d.m.core.ReactiveMongoTemplate  : Inserting Document containing fields: [_class] in collection: users 

및 두 번째 예 없음 로깅 전혀 :

제 경우 로깅 말한다.

ReactiveUserRepository은 빈 인터페이스는 다음과 같이 ReactiveCrudRepository 확장된다

@Repository 
public interface ReactiveUserRepository extends ReactiveCrudRepository<User, Long> { 

} 

이해, 내가 대신 ReactiveCrudRepository의 MongoRepository를 사용할 수 있으며 그 작동합니다. 질문은 왜 문서를 DB로 저장하는 것이 메서드 반환 유형에 의존하는지입니다.

답변

3

두 번째 코드 조각에 Mono<User> (.save(user))이 등록되어 있지 않습니다. 가입이 없으면 원자로에서 아무 일도 일어나지 않습니다.

@RequestMapping(value = "/signup", method = RequestMethod.POST) 
String save(@ModelAttribute(value = "user") User user) { 
    User user = reactiveUserRepository.save(user).block(); 
    return "login"; 
} 

당신은 save(user)에 의해 반환되는 모노에 Mono.block() 연산자를 추가 할 수 있습니다. 이것은 모노를 구독하고 결과를 기다립니다.

첫 번째 발췌 문장에서 spring은 자동으로 결과를 구독하므로 그것이 실행됩니다.

+0

저장시 차단해야하나요? – StackTraceYo

관련 문제