Developer Cafe

PHP Json형태를 JAVA Json형태로 변경하기 본문

JAVA

PHP Json형태를 JAVA Json형태로 변경하기

개발자 카페 2021. 8. 5. 14:13
728x90

 

위의 API 를 주고 이걸 JAVA로 바꿔 차이름 입력시 model과 code가 나오게 해달라 라고 하셨다.

 

 

과제를 받고 난뒤 너무 난감했다. 왜냐하면... 생전 처음보는 Json이였기 때문이다.
RestFull API 에는 Json, xml만 있는지 알았지 이런 Json이 있는지는 처음알았다.

 

몇번이나 구글링한 후 위의 사진이 PHP Json이라는걸 알아냈다.

이를 Java Json화 시키는 작업이 있을까 몇일을 구글링 한 후에야 JsonNode라는걸 이용해 Java화 시키는게 가능한걸 알아냈다.

1. WebClient로 Request하기

우선 요청규격에 맞게 WebClient를 작성했다.

WebClient.RequestHeadersSpec<?> request = WebClient.create("https://rentapi.mygrim.com")
      .post()
      .uri("/basicv2/carlist.php")
      .headers(httpHeader -> httpHeader.setAll(headers))
      .syncBody(body)
      .accept(MediaType.APPLICATION_JSON)
      .acceptCharset(Charset.forName("UTF-8"));

    String result = request.exchange().timeout(Duration.ofMillis(10000)).block().bodyToMono(String.class).block();

아래 형식의 WebClient도 가능하다.

    String str = WebClient.create("https://rentapi.mygrim.com/")
      .post()
      .uri("/basicv2/carlist.php")
      .headers(httpHeader -> httpHeader.setAll(headers))
      .syncBody(body)
      .retrieve()
      .bodyToMono(String.class)
      .block();

그 전에 오늘날짜와 내일날짜를 알아내야되서 Java코드를 쓰고 헤더에 담길 Map과 body를 작성했다.

Calendar cal = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    cal.add(Calendar.DATE, 1);
    String datestr1 = sdf.format(cal.getTime());
    cal.add(Calendar.DATE, 1);
    String datestr2 = sdf.format(cal.getTime());

    Map<String, String> headers = new LinkedHashMap<>();
    headers.put("Content-Type", "application/x-www-form-urlencoded");

    String body = "call_company[0][company]=테스트렌트카&call_company[0][pmid]=naturemb&call_company[0][pmpw]=naturemb1" +
      "&call_company[1][company]=조아렌트카&call_company[1][pmid]=naturemb&call_company[1][pmpw]=naturemb1" +
      "&st="+datestr1+"0900&et="+datestr2+"0900";

첫번째 전체코드

Calendar cal = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    cal.add(Calendar.DATE, 1);
    String datestr1 = sdf.format(cal.getTime());
    cal.add(Calendar.DATE, 1);
    String datestr2 = sdf.format(cal.getTime());

    Map<String, String> headers = new LinkedHashMap<>();
    headers.put("Content-Type", "application/x-www-form-urlencoded");

    String body = "call_company[0][company]=테스트렌트카&call_company[0][pmid]=naturemb&call_company[0][pmpw]=naturemb1" +
      "&call_company[1][company]=조아렌트카&call_company[1][pmid]=naturemb&call_company[1][pmpw]=naturemb1" +
      "&st="+datestr1+"0900&et="+datestr2+"0900";

    WebClient.RequestHeadersSpec<?> request = WebClient.create("https://rentapi.mygrim.com")
      .post()
      .uri("/basicv2/carlist.php")
      .headers(httpHeader -> httpHeader.setAll(headers))
      .syncBody(body)
      .accept(MediaType.APPLICATION_JSON)
      .acceptCharset(Charset.forName("UTF-8"));

    String result = request.exchange().timeout(Duration.ofMillis(10000)).block().bodyToMono(String.class).block();

2. ObjectMapper JsonNode 사용하기

    ObjectMapper mapper = new ObjectMapper();
    JsonNode treeNode = null;

    try {
      treeNode = mapper.readValue(result, JsonNode.class);
    } catch (IOException e) {
      e.printStackTrace();
    } catch (ArithmeticException e) {
      e.printStackTrace();
    }

    System.out.println(treeNode);

System.out.println으로 찍어내어 이쁘게 Json 정리하면 아래 사진처럼 된다. 성공!!

전체코드

    Calendar cal = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    cal.add(Calendar.DATE, 1);
    String datestr1 = sdf.format(cal.getTime());
    cal.add(Calendar.DATE, 1);
    String datestr2 = sdf.format(cal.getTime());

    Map<String, String> headers = new LinkedHashMap<>();
    headers.put("Content-Type", "application/x-www-form-urlencoded");

    String body = "call_company[0][company]=테스트렌트카&call_company[0][pmid]=naturemb&call_company[0][pmpw]=naturemb1" +
      "&call_company[1][company]=조아렌트카&call_company[1][pmid]=naturemb&call_company[1][pmpw]=naturemb1" +
      "&st="+datestr1+"0900&et="+datestr2+"0900";

    WebClient.RequestHeadersSpec<?> request = WebClient.create("https://rentapi.mygrim.com")
      .post()
      .uri("/basicv2/carlist.php")
      .headers(httpHeader -> httpHeader.setAll(headers))
      .syncBody(body)
      .accept(MediaType.APPLICATION_JSON)
      .acceptCharset(Charset.forName("UTF-8"));

    String result = request.exchange().timeout(Duration.ofMillis(10000)).block().bodyToMono(String.class).block();

//    String str = WebClient.create("https://rentapi.mygrim.com/")
//      .post()
//      .uri("/basicv2/carlist.php")
//      .headers(httpHeader -> httpHeader.setAll(headers))
//      .syncBody(body)
//      .retrieve()
//      .bodyToMono(String.class)
//      .block();


    ObjectMapper mapper = new ObjectMapper();
    JsonNode treeNode = null;

    try {
      treeNode = mapper.readValue(result, JsonNode.class);
    } catch (IOException e) {
      e.printStackTrace();
    } catch (ArithmeticException e) {
      e.printStackTrace();
    }

    System.out.println(treeNode);
728x90
Comments