1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.bremersee.comparator.spring.web;
18
19 import static java.util.Objects.isNull;
20
21 import java.util.List;
22 import org.bremersee.comparator.model.SortOrder;
23 import org.springframework.core.MethodParameter;
24 import org.springframework.lang.NonNull;
25 import org.springframework.lang.Nullable;
26 import org.springframework.util.StringUtils;
27 import org.springframework.web.reactive.BindingContext;
28 import org.springframework.web.reactive.result.method.SyncHandlerMethodArgumentResolver;
29 import org.springframework.web.server.ServerWebExchange;
30
31
32
33
34
35
36 public class ReactiveSortOrderHandlerMethodArgumentResolver
37 extends SortOrderHandlerMethodArgumentResolverSupport
38 implements SyncHandlerMethodArgumentResolver {
39
40
41
42
43 public ReactiveSortOrderHandlerMethodArgumentResolver() {
44 super();
45 }
46
47 @Override
48 public boolean supportsParameter(@NonNull MethodParameter parameter) {
49 return SortOrder.class.equals(parameter.getParameterType());
50 }
51
52 @Nullable
53 @Override
54 public SortOrder resolveArgumentValue(
55 @NonNull MethodParameter parameter,
56 @NonNull BindingContext bindingContext,
57 @NonNull ServerWebExchange exchange) {
58
59 List<String> parameterValues = exchange.getRequest()
60 .getQueryParams()
61 .get(getParameterName(parameter));
62
63
64 if (isNull(parameterValues) || parameterValues.isEmpty()) {
65 return getDefaultFromAnnotationOrFallback(parameter);
66 }
67
68
69 if (parameterValues.size() == 1 && !StringUtils.hasText(parameterValues.get(0))) {
70 return getDefaultFromAnnotationOrFallback(parameter);
71 }
72
73 return parseParameterValues(parameterValues);
74 }
75
76 }