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

标签 java spring rx-java project-reactor

在这里,我尝试使用返回发布者的reactive-redis ReactiveRedisTemplate 来升级我的 spring-data-redis RedisTemplate 。在本例中,我想将方法​​ 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

然后,因为我想让它响应式地工作,所以我更新此代码以返回发布者,如下所示:

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

但它也不起作用,因为我的 findCache 接受通用。 我需要做什么,请帮忙。

最佳答案

最好指定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,而不是 null。

关于Java 无法将reactor.core.publisher.MonoDefer 转换为EntityClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53680717/

相关文章:

java - Eclipse Java 缺少所需的源文件夹 : 'src'

java - 如何列出jar中资源中的目录

java - 云应用程序使用多个架构还是单个架构?

android - RxJava 请求列表

android - 如何在不到处添加特定代码的情况下处理 auth0 403 错误 (Retrofit/okhttp/RxAndroid)

java - 如何覆盖 Log4J 行号

java - 如何在签署应用程序时保留别名属性?

java - Rest API 中的 JWT token 传递

spring - 在 Web 应用程序中搜索 Controller

android - 没有找到类 rx.android.schedulers.AndroidSchedulers