将 @Cacheable 注释与 Reactive 控制器方法一起使用
Using @Cacheable annotation with a Reactive controller method
我目前正在尝试使用 Redis 为 Sprint Boot 应用程序实施缓存:
@Cacheable(value = "products", key = "#id")
@GetMapping(value = "/product/{id}")
public Mono<Product> getProduct(@PathVariable("id") String sku) {
...
}
但是,我遇到了这个异常:
java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [reactor.core.publisher.MonoMapFuseable]
根据我的研究,这与尝试序列化 Mono return 类型有关,而不是 Product
本身。所以我的问题是,对于像这样的反应式方法,用 Redis 实现缓存机制的推荐方法是什么?非常感谢评论和反馈。
将 getProduct() 的 return 类型从 Mono 更改为 Product。
由于您一次只获得一种产品,并且您使用的是 Mono<>,因为它最多发出一项,然后(可选)以 onComplete 信号或 onError 信号终止。
所以不要使用 Product 作为 return 类型并定义 if else 没有产品,即处于错误状态。
否则
通过这些链接了解使用 Redis
实现缓存机制的方法
我目前正在尝试使用 Redis 为 Sprint Boot 应用程序实施缓存:
@Cacheable(value = "products", key = "#id")
@GetMapping(value = "/product/{id}")
public Mono<Product> getProduct(@PathVariable("id") String sku) {
...
}
但是,我遇到了这个异常:
java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [reactor.core.publisher.MonoMapFuseable]
根据我的研究,这与尝试序列化 Mono return 类型有关,而不是 Product
本身。所以我的问题是,对于像这样的反应式方法,用 Redis 实现缓存机制的推荐方法是什么?非常感谢评论和反馈。
将 getProduct() 的 return 类型从 Mono 更改为 Product。
由于您一次只获得一种产品,并且您使用的是 Mono<>,因为它最多发出一项,然后(可选)以 onComplete 信号或 onError 信号终止。
所以不要使用 Product 作为 return 类型并定义 if else 没有产品,即处于错误状态。
否则 通过这些链接了解使用 Redis
实现缓存机制的方法