webClient의 response가 json 형식이어서 처음에는 dto를 만들어서 정보를 다 받자! 고 생각했는데 나에게 필요하지 않은 정보가 대다수여서 String으로 받은 후 json 파서를 이용해 필요한 정보만 저장하기로 했다. (정말 많은 정보가 response로 들어왔는데 필요한 field는 8개 정도였다)
Java 진영에서 많이 사용하는 Json 파서는 Jackson, GSON, json-simple 이렇게 3가지가 있는데 빅데이터 환경(Jackson)도 아니고, 마이크로 서비스나 분산 아키텍처 서비스(GSON)도 아니기 때문에 json-simple을 선택했다.
build.gradle
implementation group: 'com.googlecode.json-simple', name:'json-simple', version:'1.1.1'
사용
기존의 메서드를 간략화했다.
먼저 JSONParser를 만들고, json을 parse한 jsonObj로 필요한 정보만 파싱하면 된다. 리스트라면 JSONArray를 사용한다.
private List<ResponseOrderDto> parseOrderList(String json){ //필요한 정보만 parsing
List<ResponseOrderDto> responseList = new ArrayList<>();
JSONParser parser = new JSONParser();
try {
JSONObject jsonObj = (JSONObject) parser.parse(json);
JSONObject data = (JSONObject) jsonObj.get("data");
JSONObject OrderItemList = (JSONObject) data.get("order_item_list");
JSONArray itemList = (JSONArray) partnerOrderItemList.get("item_list");
for(int i=0;i<itemList.size();i++){
JSONObject orderInfo = (JSONObject) itemList.get(i);
JSONObject order = (JSONObject) orderInfo.get("order");
String orderNumber = (String) order.get("order_number");
}
} catch (ParseException e) {
throw new ParsingException("주문 정보를 받아올 수 없습니다.");
}
return responseList;
}