티스토리 뷰

 _RestTemplate 란? 

Spring 3.0부터 지원하며 스프링에서 HTTP 통신, REST API에 유용하게 쓸 수 있도록 제공해주며 템플릿이다.

 

 _RestTemplate 예제 

아래 코드는 HTTP GET 방식을 이용하여 response body를 객체에 배열형태로 담는다.

 

1) spring code

@GetMapping("/getlist")
	public People[] getList() throws JsonMappingException, JsonProcessingException {
		HttpHeaders headers = new HttpHeaders();
		headers.setAccept(Arrays.asList(new MediaType[] { MediaType.APPLICATION_JSON }));
		headers.setContentType(MediaType.APPLICATION_JSON);
		headers.set("KEY", "VALUE");
        
		HttpEntity<String> entity = new HttpEntity<String>("", headers);

        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<String> respEntity = restTemplate.exchange(BASE_URL, HttpMethod.GET, entity, String.class);
        
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonNode = objectMapper.readTree(respEntity.getBody());
        People[] peopleList = objectMapper.treeToValue( jsonNode.path("items"), People[].class);
        
		return peopleList;
	}

 

2) response

{
    "Date": "Sun, 26 Apr 2020 15:38:21 +0900",
    "items": [
        {
            "name": "김삿갓",
            "address": "blabla",
            "number": "010-1234-5678"
        },
        {
            "name": "박삿갓",
            "address": "blabla2",
            "number": "010-8765-4321"
        }
    ]
}

 

  • http header는 HttpHeaders에 설정하고, HttpEntity에 body와 header를 설정한다.
  • 기존 코드는 RestTemplate의 getForObject를 이용했는데, 해당 함수는 header를 정의할 수 없다고 하여 exchange 함수를 이용해 ResponseEntity에 response값을 받아왔다.
  • response가 위와같이 되어있을 때, items만 배열형태로 담고 싶다면 ObjectMapper의 readTree를 이용하여 해당 Path를 지정해서 value를 담으면 된다.
댓글
댓글쓰기 폼