protected final Mono<HttpClientResponse> get(Object request, Function<UriComponentsBuilder, UriComponentsBuilder> uriTransformer) { return get(request, uriTransformer, outbound -> outbound); }
protected final Mono<HttpClientResponse> get(Object request, Function<UriComponentsBuilder, UriComponentsBuilder> uriTransformer, Function<HttpClientRequest, HttpClientRequest> requestTransformer) { return doGet(getUriAugmenter(request, uriTransformer), requestTransformer) .otherwise(HttpException.class, CloudFoundryExceptionBuilder::build); }
protected final <T> Mono<T> put(Object request, Class<T> responseType, Function<UriComponentsBuilder, UriComponentsBuilder> uriTransformer) { return doPut(request, responseType, getUriAugmenter(request, uriTransformer), outbound -> outbound) .otherwise(HttpException.class, CloudFoundryExceptionBuilder::build); }
protected final <T> Mono<T> post(Object request, Class<T> responseType, Function<UriComponentsBuilder, UriComponentsBuilder> uriTransformer) { return doPost(request, responseType, getUriAugmenter(request, uriTransformer), outbound -> outbound) .otherwise(HttpException.class, CloudFoundryExceptionBuilder::build); }
protected final <T> Mono<T> delete(Object request, Class<T> responseType, Function<UriComponentsBuilder, UriComponentsBuilder> uriTransformer) { return doDelete(request, responseType, getUriAugmenter(request, uriTransformer), outbound -> outbound) .otherwise(HttpException.class, CloudFoundryExceptionBuilder::build); }
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 */ public static void augment(UriComponentsBuilder builder, Object instance) { Method[] methods = ReflectionUtils.getAllDeclaredMethods(instance.getClass()); Arrays.sort(methods, MethodNameComparator.INSTANCE); for (Method method : methods) { for (Annotation annotation : AnnotationUtils.getAnnotations(method)) { if (AnnotationUtils.isAnnotationMetaPresent(annotation.getClass(), FilterParameter.class)) { Object value = getValue(method, instance); if (value != null) { FilterParameter filterParameter = AnnotationUtils.getAnnotation(annotation, FilterParameter.class); Object name = AnnotationUtils.getValue(annotation); String operation = filterParameter.operator(); builder.queryParam("q", String.format("%s%s%s", name, operation, value)); } break; } } } }
protected final <T> Mono<T> get(Object request, Class<T> responseType, Function<UriComponentsBuilder, UriComponentsBuilder> uriTransformer) { return doGet(responseType, getUriAugmenter(request, uriTransformer), outbound -> outbound) .otherwise(HttpException.class, CloudFoundryExceptionBuilder::build); }
protected final <T> Mono<T> put(Object request, Class<T> responseType, Function<UriComponentsBuilder, UriComponentsBuilder> uriTransformer, Function<MultipartHttpClientRequest, Mono<Void>> requestTransformer) { return doPut(responseType, getUriAugmenter(request, uriTransformer), outbound -> requestTransformer.apply(new MultipartHttpClientRequest(this.objectMapper, outbound))) .otherwise(HttpException.class, CloudFoundryExceptionBuilder::build); }
protected final <T> Mono<T> post(Object request, Class<T> responseType, Function<UriComponentsBuilder, UriComponentsBuilder> uriTransformer, Function<MultipartHttpClientRequest, Mono<Void>> requestTransformer) { return doPost(responseType, getUriAugmenter(request, uriTransformer), outbound -> requestTransformer.apply(new MultipartHttpClientRequest(this.objectMapper, outbound))) .otherwise(HttpException.class, CloudFoundryExceptionBuilder::build); }