본문 바로가기
Programming/Java_Spring

RestTemplate 사용하기

by 곰네Zip 2022. 7. 26.

Springboot에서 RestAPI를 호출할 때, RestTemplate을 사용하여 호출할 수 있다. 사용할때마다 건건이 만들어봐도 되는데.. 더 쉽게 사용할 수 있는 방법이 있었다.. 

난 maven기준으로 개발하니까.. 우선 maven 기준으로만 작성한다. (아직 넘나들정도 수준은 아니에요..)

 

1. pom.xml에 의존성 추가

 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

 별다른건 없고.. spring-boot-starter-web을 추가하자.

 

2. Configuration설정.

 이거 하나 Bean으로 해두면.. @Autowired 애노테이션을 사용하여 쉽게(? 더쉽게) 사용할 수 있다.

@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplate getRestTemplate(RestTemplateBuilder builder){
        return builder
                .requestFactory(() -> new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory()))                
                .additionalMessageConverters(new StringHttpMessageConverter(Charset.forName("UTF-8")))
                .build();
    }
}

만약 connectiontimeout / readtimeout을 설정하고싶으면 설정하면 됨.

 

3. Resttemplate를 사용할 곳에서 정의

@Service
public class ApiServiceImpl<T> {
    private RestTemplate restTemplate;
    
    @Autowired
    public ApiServiceImpl(RestTemplate template){ this.restTemplate = template; }
    
    @Override
    public ResponseEntity<T> get(String url){
    	return this.restTemplate.getForObject( url, (Class<T>)Object.class);
    }
    
    @Override
    public ResponseEntity<T> post(String url, HttpHeaders header, Object body){
    	return this.restTemplate.postForObject(url, new HttpEntity(body, header), (Class<T>)Object.class);
    }
    
    @Override
    public ResponseEntity<T> post(String url, HttpHeaders headers, Object body, Class<T> class){
    	return this.restTemplate.exchange(url, HttpMethod.POST, new HttpEntity(body, header), class);
    }
 }

 뭐.. 그냥 이렇게 해두면 알아서 RestTemplateBuilder가 RestTemplate를 만들어서 할당해준다.

아니면 필요시마다 RestTemplate를 다 구현해줘야지..

 아니면 단순히 RestTemplate를 반환하는 메소드를 구현하여 처리하는 방법도 Stackoverflow에 있긴 하더라.

@Bean
public RestTemplate restTemplate(){
	return new RestTemplate();
}

여튼.. 이렇게 구현하면, 

public class MyImplClass{
	@Autowired
    public ApiServiceImpl myImpl;
    
    public void CallRestAPI(){
    	String result = this.myImpl.get("MyURL");
    }
}

뭐.. 위와 같이 구현하면 된다. 잘만들어져있네 이거..

반응형

댓글