тип «производитель» неизвестен для ReactiveAdapterRegistry (обработчик WebFlux)

#spring-webflux #project-reactor #reactive-streams

Вопрос:

У меня есть следующий маршрут в моем приложении

 @Bean
public RouterFunction<ServerResponse> route(UserHandler handler) {
    return RouterFunctions.route(RequestPredicates.POST("/users"), handler::signup);
}
 

который обрабатывается следующим методом

 public Mono<ServerResponse> signup(ServerRequest request) {
    return request
            .bodyToMono(User.class)
            .map(user -> {
                user.setPassword(encoder.encode(user.getPassword()));
                return user;
            })
            .flatMap(repository::save)
            .map(user -> tokenService.create(user.getId()))
            .map(TokenDto::new)
            .flatMap(tokenDto -> ServerResponse.ok().body(tokenDto, TokenDto.class));
}
 

Когда я отправляю допустимый запрос на конечную точку, регистрируется следующая ошибка

 'producer' type is unknown to ReactiveAdapterRegistry
 

Исследовав проблему с помощью отладчика, я вижу, что метод регистрации моего обработчика успешно завершен, поэтому я предполагаю, что маршрутизатору не нравится возвращаемое значение, но я не уверен, почему?

Комментарии:

1. Когда я использую ServerResponse.ok() , я обычно добавляю .contentType(MediaType.APPLICATION_JSON) (или другой тип контента) раньше .body . Вам разрешено это делать в вашем случае?

2. Спасибо, я пропустил это, но, к сожалению, это не решило проблему

3. Я бы попытался разделить код, создав пользователя в другом вложенном конвейере, а затем вызвав return ServerResponse.ok().body(tokenDto, TokenDto.class); его . Кстати, я не понимаю, как вы создаете новый токен на основе пользователя, если вы не передаете пользователя по адресу .map(TokenDto::new) .

4. Новый токен создается на основе идентификатора пользователя user -> tokenService.create(user.getId()) , затем возвращенный JWS используется для создания экземпляра TokenDto , который впоследствии возвращается клиенту.