Implemented rest api utils

This commit is contained in:
Andrey Terentev 2023-11-26 17:52:59 +07:00
parent abd8eef0f9
commit a6d1c0ef3b
2 changed files with 101 additions and 0 deletions

View File

@ -0,0 +1,23 @@
package ru.dragonestia.loadbalancer.web.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
import java.util.function.Supplier;
@Configuration
public class RestApiConfig {
@Bean
RestTemplateBuilder restTemplateBuilder() {
return new RestTemplateBuilder();
}
@Bean
Supplier<RestTemplate> restTemplate(@Autowired RestTemplateBuilder builder) {
return builder::build;
}
}

View File

@ -0,0 +1,78 @@
package ru.dragonestia.loadbalancer.web.repository.impl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.net.URI;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.function.Consumer;
import java.util.function.Supplier;
@Component
@RequiredArgsConstructor
public class RestUtil {
private final URI serverUrl;
private final Supplier<RestTemplate> restTemplate;
public <T> T get(URI uri, Class<T> responseType) {
var template = restTemplate.get();
return Objects.requireNonNull(template.getForObject(serverUrl.resolve(uri), responseType));
}
public <T> T get(URI uri, Class<T> responseType, Consumer<Map<String, String>> paramsConsumer) {
var params = new HashMap<String, String>();
paramsConsumer.accept(params);
var template = restTemplate.get();
return Objects.requireNonNull(template.getForObject(buildPath(uri, params.keySet()),
responseType,
params));
}
public <T> T post(URI uri, Class<T> responseType, Consumer<Map<String, String>> paramsConsumer) {
var params = new HashMap<String, String>();
paramsConsumer.accept(params);
var template = restTemplate.get();
return Objects.requireNonNull(template.postForObject(buildPath(uri, params.keySet()),
null,
responseType,
params));
}
public void put(URI uri, Consumer<Map<String, String>> paramsConsumer) {
var params = new HashMap<String, String>();
paramsConsumer.accept(params);
var template = restTemplate.get();
template.put(buildPath(uri, params.keySet()), params);
}
public void delete(URI uri, Consumer<Map<String, String>> paramsConsumer) {
var params = new HashMap<String, String>();
paramsConsumer.accept(params);
var template = restTemplate.get();
template.delete(buildPath(uri, params.keySet()), params);
}
private String buildPath(URI uri, Collection<String> paramKeys) {
var path = new StringBuilder(serverUrl.resolve(uri) + "?");
int left = paramKeys.size();
for (var key: paramKeys) {
path.append(key);
path.append("={");
path.append(key);
path.append("}");
if (--left > 0) {
path.append("&");
}
}
return path.toString();
}
}