250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- @RequiredArgsConstructor
- code
- 마크다운 테이블
- 선형 리스트
- java
- 스택 큐 차이
- 배열
- 클린코드
- WebClient
- 클래스
- 클린
- 정렬
- 트리
- @NoArgsConstructor
- query
- CleanCode
- 빅 오 표기법
- 자료구조
- 리스트
- 마크다운
- JsonNode
- 계산 검색 방식
- mysql
- @ComponentScan
- 코드
- 연결 리스트
- 쿼리메소드
- 쿠키
- 내부 정렬
- 인터페이스
Archives
- Today
- Total
Developer Cafe
PHP Json형태를 JAVA Json형태로 변경하기 본문
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
'JAVA' 카테고리의 다른 글
Json value 값에서 특정데이터 입력시 요구데이터 값들 가져오기 (0) | 2021.08.05 |
---|---|
사례를 통해 JAVA코드로 달력 구현하기 (0) | 2021.06.23 |
Optional (0) | 2021.05.21 |
DTO 설계하기 (0) | 2021.05.11 |
JIT 컴파일러 (Just-In-Time 컴파일러) (0) | 2021.03.06 |
Comments