SpringBoot: создать фабрику запросов для прокси GET Request - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь сделать запрос GET к другому API.Мне также нужно передать прокси.Я попытался реализовать фабрику запросов шаблонов REST, но у меня истекло время ожидания соединения.Вот мой контроллер:

@RestController
public class AuthenticateController {

    @Bean
    public RestTemplate restTemplate() {
        SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();

        Proxy proxy= new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxyhost", proxyport));
        requestFactory.setProxy(proxy);
        requestFactory.setReadTimeout(3000);
        requestFactory.setConnectTimeout(3000);
        return new RestTemplate(requestFactory);
    }

    @Autowired
    RestTemplate restTemplate;

    @Value("${resources.authenticate}")
    private String authServiceUrl;

    @GetMapping("/authenticate")
    public AuthenticateRto authenticateUser(@RequestParam("api_key") String apiKey) {

        UriComponentsBuilder authenticateUrlBuilder = UriComponentsBuilder.fromUriString(authServiceUrl)
                .queryParam("api_key", apiKey);
        return restTemplate.getForObject(authenticateUrlBuilder.toUriString(), AuthenticateRto.class);
    }
}

Я не уверен, установлен ли прокси-сервер при совершении вызова.

1 Ответ

0 голосов
/ 18 сентября 2018

Лучше было бы использовать инъекцию конструктора .

Объявление бина RestTemplate в классе конфигурации:

@Configuration
public class ApplicationConfiguration {

  @Bean
  public RestTemplate restTemplate() {
    SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
    Proxy proxy= new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxyhost", proxyport));
    requestFactory.setProxy(proxy);
    requestFactory.setReadTimeout(3000);
    requestFactory.setConnectTimeout(3000);
    return new RestTemplate(requestFactory);
  }

}

А затем использовать инжекцию конструкторадля получения необходимого RestTemplate bean-компонента:

@RestController
public class AuthenticateController {

  private final RestTemplate restTemplate;

  public AuthenticateController(RestTemplate RestTemplate) {
    this.restTemplate = restTemplate;
  }

  // rest of the controller's logic
}

Обратите внимание, что вы можете опустить @Autowired, поскольку AuthenticateController имеет один конструктор.

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