Создание сервиса Dynami c в весенней загрузке - PullRequest
2 голосов
/ 18 апреля 2020

Мне нужен способ создать динамический / универсальный c отдыхающий клиент. Моему весеннему загрузочному приложению необходимо подключиться ко многим сторонним клиентам, каждый из которых имеет различное тело запроса, тело ответа, некоторые требуют специальных заголовков, в то время как некоторым требуется специальная авторизация / аутентификация (например, Basi c Auth, JWT, HMA C et c).

Пока мне удалось найти следующего клиента

public class GenericRestClient<T, V> {

    private RestTemplate restTemplate = new RestTemplate();

    public V execute(RequestDetails requestDetails, T data, ResponseErrorHandler errorHandler,
            Class<V> genericClass) throws ResourceAccessException, Exception {

        restTemplate.setErrorHandler(errorHandler);
        HttpHeaders headers = new HttpHeaders();

        HttpEntity<T> entity = new HttpEntity<T>(data, headers);
        ResponseEntity<V> response = restTemplate.exchange(requestDetails.getUrl(), requestDetails.getRequestType(),
                entity, genericClass);
        return response.getBody();
    }

}

Но мой вопрос. Есть ли способ теперь сгенерировать все необходимые заголовки, аутентификацию и авторизацию, когда все они имеют разные требования? Как я могу это сделать?

Есть ли способ сохранить java код, такой как скрипт (например, JTX), в базе данных и использовать их, или есть какой-то лучший способ создать мою потребность?

Я хочу, чтобы, даже если приходит новый клиент, больше никакого кодирования не требовалось.

1 Ответ

1 голос
/ 18 апреля 2020

Вы можете сохранить конфигурацию каждого клиента в базе данных. Если вы используете JPA, вы получите такой класс:

@Entity
class RestClientConfiguration{
    private String url;
    private Map<String,String> headers;

    //whatever data you need
}

Тогда вам нужно только передать RestClientConfiguration в ваш GenericRestClient класс.

public class GenericRestClient<T, V> {

    public V execute(RequestDetails requestDetails, T data, ResponseErrorHandler errorHandler,
            Class<V> genericClass, RestClientConfiguration clientConfiguration) throws ResourceAccessException, Exception {

        String url = clientConfiguration.getUrl();
        Map<String, String> headerMap = clientConfiguration.getHeaders();

        //here add code which map headerMap which is a Map to HttpHeaders object


        RestTemplate restTemplate = new RestTemplate();
        restTemplate.setErrorHandler(errorHandler);
        HttpHeaders headers = new HttpHeaders();


        HttpEntity<T> entity = new HttpEntity<T>(data, headers);
        ResponseEntity<V> response = restTemplate.exchange(requestDetails.getUrl(), requestDetails.getRequestType(),
                entity, genericClass);
        return response.getBody();
    }
}

Вот и все. Надеюсь, я хорошо понял ваши потребности. Дайте мне знать, если что-то не понятно, и мы решим это :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...