1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.bremersee.apiclient.webflux.contract.spring;
18
19 import java.net.URI;
20 import java.util.ArrayList;
21 import java.util.List;
22 import java.util.function.BiConsumer;
23 import java.util.function.BiFunction;
24 import java.util.function.Function;
25 import org.bremersee.apiclient.webflux.Invocation;
26 import org.bremersee.apiclient.webflux.ReactiveContract;
27 import org.bremersee.apiclient.webflux.contract.CookiesConsumer;
28 import org.bremersee.apiclient.webflux.contract.HeadersConsumer;
29 import org.bremersee.apiclient.webflux.contract.RequestBodyInserterRegistry;
30 import org.bremersee.apiclient.webflux.contract.RequestUriFunction;
31 import org.bremersee.apiclient.webflux.contract.RequestUriSpecFunction;
32 import org.bremersee.apiclient.webflux.contract.ResponseFunction;
33 import org.reactivestreams.Publisher;
34 import org.springframework.http.HttpHeaders;
35 import org.springframework.util.MultiValueMap;
36 import org.springframework.web.reactive.function.client.WebClient;
37 import org.springframework.web.reactive.function.client.WebClient.RequestBodyUriSpec;
38 import org.springframework.web.reactive.function.client.WebClient.RequestHeadersUriSpec;
39 import org.springframework.web.reactive.function.client.WebClient.ResponseSpec;
40 import org.springframework.web.util.UriBuilder;
41
42
43
44
45
46
47 public class ReactiveSpringContract implements ReactiveContract {
48
49 private final ContentTypeResolver contentTypeResolver = new ContentTypeResolver();
50
51 @Override
52 public BiConsumer<Invocation, MultiValueMap<String, String>> getCookiesConsumer() {
53 return CookiesConsumer.builder()
54 .cookiesResolver(new CookiesResolver())
55 .build();
56 }
57
58 @Override
59 public BiConsumer<Invocation, HttpHeaders> getHeadersConsumer() {
60 return HeadersConsumer.builder()
61 .contentTypeResolver(contentTypeResolver)
62 .acceptResolver(new AcceptResolver())
63 .headersResolver(new RequestHeadersResolver())
64 .build();
65 }
66
67 @Override
68 public BiFunction<Invocation, UriBuilder, URI> getRequestUriFunction() {
69 return RequestUriFunction.builder()
70 .requestPathResolver(new RequestPathResolver())
71 .pathVariablesResolver(new PathVariablesResolver())
72 .requestParametersResolvers(getRequestParametersResolvers())
73 .build();
74 }
75
76
77
78
79
80
81 protected List<Function<Invocation, MultiValueMap<String, Object>>>
82 getRequestParametersResolvers() {
83
84 List<Function<Invocation, MultiValueMap<String, Object>>> list = new ArrayList<>();
85 list.add(new RequestParametersResolver());
86 if (Extensions.isSortPresent) {
87 list.add(new SortRequestParameterResolver());
88 }
89 if (Extensions.isPageablePresent) {
90 list.add(new PageableRequestParameterResolver());
91 }
92 return list;
93 }
94
95 @Override
96 public BiFunction<Invocation, WebClient, RequestHeadersUriSpec<?>> getRequestUriSpecFunction() {
97 return RequestUriSpecFunction.builder()
98 .httpMethodResolver(new HttpMethodResolver())
99 .build();
100 }
101
102 @Override
103 public BiFunction<Invocation, RequestBodyUriSpec, RequestHeadersUriSpec<?>>
104 getRequestBodyInserterFunction() {
105
106 return RequestBodyInserterRegistry.builder()
107 .addRequestBodyInserters(new FormDataInserter()
108 .withContentTypeResolver(contentTypeResolver))
109 .addRequestBodyInserters(new MultipartDataInserter()
110 .withContentTypeResolver(contentTypeResolver))
111 .addRequestBodyInserters(new ResourceInserter())
112 .addRequestBodyInserters(new DataBuffersInserter())
113 .addRequestBodyInserters(new PublisherInserter())
114 .addRequestBodyInserters(new ValueInserter())
115 .build();
116 }
117
118 @Override
119 public BiFunction<Invocation, ResponseSpec, Publisher<?>> getResponseFunction() {
120 return new ResponseFunction();
121 }
122 }