우선 API 서버의 스펙을 확인하고 data class 를 만들어 줍니다.
data class GetToken(
val responseCode: String,
val token: String
)
Http Request 이후 Json 을 담아줄 클래스에 아래 내용을 추가해 줍니다.
@Autowired
lateinit var restTemplate: RestTemplate
var mapper: ObjectMapper = ObjectMapper().registerModules(KotlinModule())
펑션을 하나 만드셔서 안에 아래 내용을 작성하기 시작합니다.
val headers = HttpHeaders()
headers.contentType = MediaType.APPLICATION_JSON
contentType 은 스팩에 맞게 MediaType 을 넣어주세요.
추가 커스텀 헤더는
set(String headerName, @Nullable String headerValue)
함수를 이용해줍니다.
저같은 경우에는, 요청할 때 ID 와 Password 를 body 에 담아야 했기에 아래와 같이 작성합니다.
val bodyJsonObject = JSONObject()
bodyJsonObject.put("sid", SerialId)
bodyJsonObject.put("passwd", Password)
// 코틀린 스럽게
val bodyJsonObject = JSONObject().apply {
put("sid", SerialId)
put("passwd", Password)
}
위 정보대로 요청 변수를 생성해줍니다.
val request = HttpEntity(bodyJsonObject.toString(), headers)
이제 요청할 차례입니다.
"https://www" 부분에 URL 주소를 입력합니다.
val response: String = restTemplate.postForObject<String>("https://www", request, String::class)
저는 http request 에 post method 를 이용해야 하였기에 postForObject() 를 이용하였습니다.
get 은 getForObject() 라는 함수가 있습니다.
응답 값을 data class 와 매핑하기 위해 아래와 같이 작성합니다.
val getToken = mapper.readValue(response, GetToken::class.java)
이렇게 작성해 주시면 객체가 잘 담겨지게 됩니다.
ObjectMapper 는 코틀린에서 사용 방법이 난해한 부분이 있어 아래 블로그를 참고하였습니다.
좋은 공부가 되었습니다. 들어가셔서 보시면 많은 도움이 되실겁니다.
https://kapentaz.github.io/kotlin/json/Kotlin-and-Jackson-(ObjectMapper)/
Kotlin and Jackson (ObjectMapper)
kotlin 환경에서 Jackson 라이브러리를 사용할 때 객체 변환이 생각대로 잘 안될 수 있습니다. 어떤 경우가 있는지 어떻게 해결할 수 있는지 확인해 보겠습니다.
kapentaz.github.io