Пытаясь перенести мое приложение Spring Boot на WebFlux, я начал преобразовывать файл, оставляя хранилище нетронутым (т. Е. Доступ к БД - это синхронизация и блокировка).У меня возникают проблемы с получением данных из типов Mono / Flux и их пересылкой в хранилище.
Рассмотрим следующее
@POST
@Path("/register")
public String register( String body ) throws Exception
{
ObjectMapper objectMapper = json();
User user = objectMapper.readValue( body, User.class );
int random = getRandomNumber( 111111, 999999 );
String uuid = null;
//first, check if user already did registration from that phone
UserDbRecord userDbRecord = UserDAO.getInstance().getUserByPhone( user.phone );
if( userDbRecord != null )
{
logger.info( "register. User already exist with phone: " + user.phone + ", id: " + userDbRecord.getId() );
uuid = userDbRecord.getToken();
}
else
{
uuid = UUID.randomUUID().toString();
}
SMS.send( user.phone, random );
Auth auth = new Auth();
auth.token = uuid;
return objectMapper.writeValueAsString( auth );
}
Итак, пытаемся сделать следующее:
public Mono<ServerResponse> register( ServerRequest request )
{
Mono<User> user = request.bodyToMono( User.class );
Mono<UserDbRecord> userDbRecord = user.flatMap( u -> Mono.just( userRepository.findByPhone( u.phone ) ) );
int random = getRandomNumber( 111111, 999999 );
String uuid = null;
//first, check if user already did registration from that phone
//now what???
if( userDbRecord != null )
{
logger.info( "register. User already exist with phone: " + userDbRecord.getPhone() + ", id: " + userDbRecord.getId() );
uuid = userDbRecord.getToken();
}
else
{
uuid = UUID.randomUUID().toString();
}
SMS.send( user.phone, random );
Auth auth = new Auth();
auth.token = uuid;
return ok().contentType( APPLICATION_JSON ).syncBody( auth );
}
Каков наилучший способ проверить, является ли userDbRecord Mono пустым, а если нет, извлечь свойство телефона из него?