Java не может привести реактор.core.publisher.MonoDefer к EntityClass - PullRequest
0 голосов
/ 08 декабря 2018

Здесь я пытаюсь обновить свой spring-data-redis RedisTemplate, используя реактивный-redis ReactiveRedisTemplate, который возвращает Publisher.В этом случае я хочу изменить метод findCache на Mono.Проблема в старой findCache функции, которая с помощью spring-data-redis принимает общие данные, например:

@Autowired
ReactiveRedisTemplate redisTemplate;

public <T> T findCache(String key, Class<T> clazz) {
    Object content = this.redisTemplate.opsForValue().get(key);

    if (content != null) {
      return clazz.cast(content);
    }

    return null;
  }

конечно, я получу ошибку

Cannot cast reactor.core.publisher.MonoDefer to Person

тогда, так какя хочу, чтобы он работал реактивно, я обновляю этот код, чтобы вернуть издателя, например:

if (content != null) {
      return ((Mono) content).flatMap(o -> clazz.cast(o));
    }

, но он также не будет работать, так как мой findCache принимает универсальный.что я должен сделать, пожалуйста, помогите.

1 Ответ

0 голосов
/ 08 декабря 2018

Было бы лучше указать ReactiveRedisTemplate параметры.Но если вы не можете, вам следует изменить тип контента на Mono<Object>.Примерно так:

public <T> Mono<T> findCache(String key, Class<T> clazz) {
    @SuppressWarnings("unchecked")
    Mono<Object> contentMono = redisTemplate.opsForValue().get(key);
    return contentMono.map(clazz::cast);
}

И если кеш не содержит значения для данного ключа, он возвращает пустой Mono, а не ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...