private static Function<UriComponentsBuilder, UriComponentsBuilder> getUriAugmenter(Object request, Function<UriComponentsBuilder, UriComponentsBuilder> uriTransformer) { return builder -> { FilterBuilder.augment(builder, request); QueryBuilder.augment(builder, request); return uriTransformer.apply(builder); }; }
/** * Augments a {@link UriComponentsBuilder} with queries based on the methods annotated with {@link FilterParameter} * * @param builder the builder to augment * @param instance the instance to inspect and invoke */ @SuppressWarnings("unchecked") public static void augment(UriComponentsBuilder builder, Object instance) { Method[] methods = ReflectionUtils.getAllDeclaredMethods(instance.getClass()); Arrays.sort(methods, MethodNameComparator.INSTANCE); for (Method method : methods) { FilterParameter filterParameter = AnnotationUtils.getAnnotation(method, FilterParameter.class); if (filterParameter == null) { continue; } String value = getValue(method, instance); if (StringUtils.hasText(value)) { builder.queryParam(filterParameter.value(), value); } } }