1 분 소요

프로젝트때 썼던 카카오 페이 코드를 Spring에서 사용할 수 있는 객체를 활용하여 더 사용하기 좋은 코드로 바꿔보자 한다.
원래 프로젝트에서 썼던 inputStream, outputStream으로 값을 보내거나 BufferedReader로 결과 값을 받는 것은 다른 블로그에서 많이 볼 수 있는 방식이었다.
이미 카카오페이기능을 만들어 두었으나 프로젝트 후반에 선생님께서 더 좋은 방식을 가르쳐주셔서 이 방법을 적용해볼려고 한다.


request body

  • MultiValueMap 하나의 key에 여러 value값을 넣을 수 있다.

단건결제를 진행할 것 이므로 카카오 페이에서 필수적으로 보내야하는 parameter값을 넣는다.

    MultiValueMap<String, String> parameters = new LinckedMultiValueMap<String, String>();


In Spring

request header

  • HttpHeaders HTTP 요청 또는 응답 헤더를 나타내는 데이터 구조 MultiValueMap<String, String> 구현 객체 header값 지정시 set(String key, String value)로 key에 header 이름, value에 header value를 넣어 만들었다.
    HttpHeaders header = new HttpHeaders();


HTTP request

  • HttpEntity 헤더와 바디으로 구성된 HTTP 요청 또는 응답 엔터티를 포함하는 클래스 카카오에 POST방식으로 요청 하므로 값을 요청 바디부에 넣어야 한다.


  1. MultiValueMap에 전달할 데이터를 넣고
  2. HttpEntity에 body와 header객체를 전달하여 요청 엔티티를 만든다.
    HttpEntity<바디에 들어갈 데이터 제네릭클래스> requestEntity = new HttpEntity<>(바디에 들어갈 데이터객체, HttpHeaders객체);


  • RestTemplate REST API 호출 후 응답을 받는 동기 방식(요청과 응답이 동시에 일어난다.) (spring framework 5부터 WebClient의 사용을 권장하고 있다. 동기 비동기 방식 둘다 사용가능한 방식)
    나의 spring version에는 없어서 일단 RestTemplate을 사용했다.


  1. postForObject로 요청할 url요청엔티티, 응답으로 받을 클래스타입를 입력받아 요청 후 지정한 응답 클래스 타입에 해당하는 객체로 결과값을 받는다.
    RestTemplate template = new RestTemplate();
    ReadyResponse readyResponse = template.postForObject(url, requestEntity, ReadyResponse.class);


BufferedReader로 값을 받지 않고 사용자 지정객체로 받을 수 있어서 무척 편리한 방법이다. 코드량도 줄어들고!

태그:

카테고리:

업데이트: