- header, parameter 아무것도 설정하지 않는 경우
fun getList(){
val url = "http://localhost:3000/~~" //외부 api 주소
val restTemplate = RestTemplate()
val response = restTemplate.getForObject<String>(
url,
String::class
)
print(response)
}
Error: I/O error on GET request for http://localhost:3000~~~~ 라는 에러가 뜬다
해결하기 위해서는 gradle에 HttpComponentsClientHttpRequestFactory라이브러리를 추가해준다
https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient
implementation("org.apache.httpcomponents:httpclient:4.5.13")
fun getList(){
val httpRequestFactory: ClientHttpRequestFactory = HttpComponentsClientHttpRequestFactory()
val url = "http://localhost:3000/~~" //외부 api 주소
val restTemplate = RestTemplate(httpRequestFactory)
val response = restTemplate.getForObject<String>(
url,
String::class
)
print(response)
}
- parameter 추가
@GetMapping("/list")
fun getList(@RequestParam p: Long?){
val httpRequestFactory: ClientHttpRequestFactory = HttpComponentsClientHttpRequestFactory()
val uri: URI = UriComponentsBuilder
.fromUriString("http://localhost:3000") //Base URL
.path("/~~")
.queryParam("p", p) // query parameter가 필요한 경우 이와 같이 사용
.encode()
.build()
.toUri()
val restTemplate = RestTemplate(httpRequestFactory)
val response = restTemplate.getForObject(
uri,
String::class.java
)
print(response)
}
getForObject대신 getForEntity 사용해도 됨
getForObject를 사용하면 객체로 결과를 받고
getForEntity는 ResponseEntity로 결과를 받기 때문에 getHeaders(), getBody()를 사용하여 필요한 정보를 받을 수 있다
반응형
- header 추가
@GetMapping("/list")
fun getList(@RequestParam p: Long?){
val httpRequestFactory: ClientHttpRequestFactory = HttpComponentsClientHttpRequestFactory()
val uri: URI = UriComponentsBuilder
.fromUriString("http://localhost:3000") //Base URL
.path("/~~")
.queryParam("p", p) // query parameter가 필요한 경우 이와 같이 사용
.encode()
.build()
.toUri()
val headers = HttpHeaders()
headers.contentType = MediaType.APPLICATION_JSON
headers.set("headername", value)
val request = HttpEntity("",headers)
val restTemplate = RestTemplate(httpRequestFactory)
val response = restTemplate.exchange(uri, HttpMethod.GET, request, String::class.java)
print(response)
}
response data 값 매핑
Dto를 만들어서 객체 형식으로 저장할 수 도 있고 key, value값으로 들고 올 수 있다
@GetMapping("/list")
fun getList(@RequestParam p: Long?){
val httpRequestFactory: ClientHttpRequestFactory = HttpComponentsClientHttpRequestFactory()
val uri: URI = UriComponentsBuilder
.fromUriString("http://localhost:3000") //Base URL
.path("/~~")
.queryParam("p", p) // query parameter가 필요한 경우 이와 같이 사용
.encode()
.build()
.toUri()
val headers = HttpHeaders()
headers.contentType = MediaType.APPLICATION_JSON
headers.set("headername", value)
val request = HttpEntity("",headers)
val restTemplate = RestTemplate(httpRequestFactory)
val response = restTemplate.exchange(uri, HttpMethod.GET, request, String::class.java)
val gson = GsonBuilder().excludeFieldsWithoutExposeAnnotation().create()
val map = gson.fromJson(response.body, Map::class.java)
for (entry in map.entries) {
println("${entry.key} = ${entry.value}")
}
}
반응형
'Kotlin' 카테고리의 다른 글
[Kotlin]CrossOrigin Annotation 여러 origin 사용 (0) | 2022.10.31 |
---|---|
QueryDSL 결과 값이 Null인 경우 다른 값으로 할당 (0) | 2022.10.28 |
[Kotlin] Thymeleaf을 사용한 html 템플릿 이메일 보내기 (0) | 2022.09.29 |
[Kotlin] Spring Boot Email 보내기, 이메일 전송 (0) | 2022.09.26 |
코틀린(Kotlin) 문자열 랜덤으로 생성, 원하는 길이 만큼의 랜덤한 문자열 만들기 (0) | 2022.09.15 |
댓글