spring Java无法将reactor.core.publisher.MonoDefer强制转换为EntityClass

rdlzhqv9  于 2023-04-19  发布在  Spring
关注(0)|答案(1)|浏览(171)

这里我尝试使用reactive-redis ReactiveRedisTemplate来升级我的spring-data-redis RedisTemplate,它返回Publisher。在这种情况下,我想将方法findCache更改为Mono。问题是使用spring-data-redis的旧findCache函数接受泛型数据,如下所示:

@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

然后,因为我想让它React性地工作,我更新了这段代码以返回publisher,像这样:

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

但它也不会工作,因为我的findCache接受通用.我需要做什么,请帮助.

wqnecbli

wqnecbli1#

最好指定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);
}

如果cache不包含给定key的值,它将返回空的Mono,而不是null。

相关问题