OpenSource/Spring Boot
springboot - RestTemplate 적용
태하팍
2024. 4. 7. 17:53
반응형
안녕하세요~
오늘은 스프링부트에서 http통신을 할 때 많이 사용하는 친구입니다.
RestTemplate를 적용해보겠습니다.
이제 사용하지 않는가 싶었는데 알아보니 비동기방식이 Deprecated되었군요!
비동기는 webClient를 사용!
동기 방식인 RestTemplate를 적용해보겠습니다.
따로 dependency를 걸 필요는 없습니다.
Web을 사용한다면 이미 아래와 같이 디펜던시를 걸었을테니깐요! ㅎㅎ
implementation 'org.springframework.boot:spring-boot-starter-web'
이제 필요한건 RestTemplate을 사용할 수 있도록 Bean을 생성하는 것 입니다.
@Configuration과 @Bean을 사용해서 아래와 같이 만들어줍니다.
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
return restTemplateBuilder
.requestFactory(() -> new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory()))
.setConnectTimeout(Duration.ofMillis(5000)) // connection-timeout
.setReadTimeout(Duration.ofMillis(5000)) // read-timeout
.additionalMessageConverters(new StringHttpMessageConverter(Charset.forName("UTF-8")))
.build();
}
}
사용은 이제 원하는곳에 가셔서 아래처럼 사용하시면 됩니다 ㅎㅎ
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
Map<Object, Object> params = new HashMap<>();
params.put("query", query);
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity(params, headers);
ResponseEntity<JsonNode> entity = restTemplate.exchange(URL, HttpMethod.POST, requestEntity, JsonNode.class);
물론 @Autowired가 아닌 생성자 주입을 통해 빈을 주입 받아서 사용합니다.
2024.03.21 - [OpenSource/Spring Boot] - Field injection is not recommended
@Repository
@RequiredArgsConstructor
public class TestRepository {
private final static String URL = "http://url입니다";
private final RestTemplate restTemplate;
RestTemplate 소스를 돌아가는 소스로 살펴보겠습니다.
Config는 동일합니다.
아래는 컨트롤러 소스 입니다.
@GetMapping("/hello3")
@ResponseBody
public ResponseEntity<String> getHello3(@RequestParam String q) {
ResponseEntity<String> res = stockService.getStockHtml3(q);
return res;
}
/hello3로 접속! get 방식 입니다.
다음으로는 서비스 소스 입니다.
생성자 주입을 통해 주입 받습니다.
@Service
@RequiredArgsConstructor
public class StockService {
private final RestTemplate restTemplate;
public ResponseEntity<String> getStockHtml3(String q){
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
Map<Object, Object> params = new HashMap<>();
params.put("query", q);
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity(params, headers);
ResponseEntity<String> res = restTemplate.exchange("https://finance.naver.com/sise/sise_quant.naver", HttpMethod.POST, requestEntity, String.class);
return res;
}
테스트로 접속해보면!
아래와 같이 나오게 됩니다.
RestClient로는 아래를 참조하세요!
2024.04.07 - [OpenSource/Spring Boot] - springboot-RestClient??
끝~
반응형