Skip to content

Commit 9f6af86

Browse files
committed
Always empty, not working as expected
1 parent f2dd0be commit 9f6af86

File tree

7 files changed

+50
-9
lines changed

7 files changed

+50
-9
lines changed

src/main/java/spring/znevzz/reactive/controller/CacheController.java

+13-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import spring.znevzz.reactive.bean.SimpleCacheRequest;
1111
import spring.znevzz.reactive.handler.IRequestHandler;
1212

13+
import java.util.Optional;
14+
1315
@AllArgsConstructor
1416
@RestController
1517
public class CacheController {
@@ -23,7 +25,17 @@ public String welcome() {
2325

2426
@PostMapping("/cache")
2527
public Flux<ICacheResponse> fromCache(@RequestBody SimpleCacheRequest request) {
26-
return handler.getFromCache(request);
28+
Flux<ICacheResponse> firstFetch = handler.viewFromCache(request).log("viewFromCache");
29+
Flux firstResult = firstFetch
30+
.map(ICacheResponse::getPayload)
31+
.filter(Optional::isPresent)
32+
.log("result of viewFromCache");
33+
34+
firstFetch
35+
.switchIfEmpty(handler.getFromCache(request))
36+
.log("secondFetch");
37+
38+
return firstResult;
2739
}
2840

2941
}

src/main/java/spring/znevzz/reactive/handler/CacheRequestHandler.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,16 @@ public Mono<ICacheResponse> get(ICacheRequest iCacheRequest) {
2929
}
3030

3131
@Override
32-
public Flux<ICacheResponse> getFromCache(ICacheRequest request) {
32+
public Flux<ICacheResponse> viewFromCache(ICacheRequest request) {
3333
return manager.handleCacheRequest(request, Request.VIEW)
3434
.timeout(Duration.ofSeconds(5))
3535
.retry(2);
3636
}
37+
38+
@Override
39+
public Flux<ICacheResponse> getFromCache(ICacheRequest request) {
40+
return manager.handleCacheRequest(request, Request.GET)
41+
.timeout(Duration.ofSeconds(5))
42+
.retry(2);
43+
}
3744
}

src/main/java/spring/znevzz/reactive/handler/IRequestHandler.java

+2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ public interface IRequestHandler<T,R> extends HandlerFunction {
1212

1313
Mono<R> get(T t);
1414

15+
Flux<R> viewFromCache(T t);
16+
1517
Flux<R> getFromCache(T t);
1618

1719
default <T extends ServerResponse> Mono<T> welcome(ServerRequest serverRequest) {

src/main/java/spring/znevzz/reactive/service/CacheManager.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public Flux<ICacheResponse> handleCacheRequest(ICacheRequest request, Request vi
3131

3232
delegateAction(request, action);
3333

34-
return responses.get(request);
34+
return responses.get(request).log();
3535
}
3636

3737
private void delegateAction(ICacheRequest request, Action action) {
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
package spring.znevzz.reactive.service;
22

33
import reactor.core.publisher.Flux;
4+
import reactor.core.publisher.Mono;
45
import spring.znevzz.reactive.bean.ICacheRequest;
56

67
import java.time.Duration;
78

89
public class DataService {
910

10-
public Flux<String> someAPI(ICacheRequest request){
11-
return Flux.just("{}")
12-
.delayElements(Duration.ofSeconds(10))
11+
public Mono<String> someAPI(ICacheRequest request){
12+
return Mono.just("{}")
1313
.log();
1414
}
1515
}

src/main/java/spring/znevzz/reactive/service/SimpleCacheService.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import org.springframework.stereotype.Component;
44
import reactor.core.publisher.Flux;
5+
import reactor.core.publisher.Mono;
56
import spring.znevzz.reactive.bean.ICacheRequest;
67
import spring.znevzz.reactive.bean.ICacheResponse;
78
import spring.znevzz.reactive.bean.SimpleCacheResponse;
@@ -24,11 +25,13 @@ public Flux<ICacheResponse> get(ICacheRequest request) {
2425

2526
@Override
2627
public Flux<ICacheResponse> put(ICacheRequest request) {
27-
Flux<String> stringFlux = service.someAPI(request);
28-
cache.put(request.getPayload(), stringFlux.blockFirst());
28+
29+
service.someAPI(request)
30+
.subscribe(response -> cache.put(request.getPayload(), response));
31+
2932
return Flux.just(
3033
new SimpleCacheResponse("Fetching"),
31-
new SimpleCacheResponse(stringFlux.blockFirst())
34+
new SimpleCacheResponse(cache.get(request.getPayload()).toString())
3235
);
3336
}
3437

src/test/java/spring/znevzz/reactive/controller/CacheControllerTest.java

+17
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,23 @@ void getFromCache() {
5656
.expectStatus()
5757
.is2xxSuccessful();
5858
}
59+
60+
61+
@Test
62+
void getFromCacheCheckResponse() {
63+
SimpleCacheRequest request = new SimpleCacheRequest();
64+
request.setUser("test");
65+
request.setPayload("{}");
66+
webTestClient.post()
67+
.uri("/cache")
68+
.accept(MediaType.APPLICATION_JSON)
69+
.bodyValue(request)
70+
.exchange()
71+
.expectStatus()
72+
.isOk()
73+
.expectBody()
74+
.json("[{}]");
75+
}
5976
@TestConfiguration
6077
static class TestConfig {
6178
@Bean

0 commit comments

Comments
 (0)