Java로 API호출 및 jsonparser

한영진·2023년 5월 9일
0

JAVA로 API호출 정리해보기!!

API호출

/////////////호출할 url/////////////////////
url = new URL(ConstantString.BASE_URL + ConstantString.START_API);

////////////HttpURLConnection 생성//////////////////
HttpURLConnection connection = (HttpURLConnection) url.openConnection();

connection.setRequestMethod("POST");///요청방식에 따라 GET,POST,PUT등 사용

POST /start
X-Auth-Token: {X-Auth-Token}
Content-Type: application/json

위와 같은 Request형식이라면 key,value로 connection에 set해줌

connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("X-Auth-Token",
"주어진 x-Auth-Token값");

connection.setDoOutput(true);//post형식 데이터 전달하기 위해 사용
connection.setDoInput(true);//작성하지않아도 기본값 true 응답을 받지 않고 연결시간단축위해 false사용하기도함
JSONObject commands = new JSONObject();//Post형식요청 보낼때 Body로 사용
commands.put("problem", problemNum);

{
"problem" : problemNum
}
을 Body로 보낸다.

DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
outputStream.writeBytes(commands.toString());
outputStream.flush();
outputStream.close();

int responseCode = connection.getResponseCode();
System.out.println("응답코드: " + responseCode);

BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));//response받아줌
String line;
while ((line = reader.readLine()) != null) {
    response.append(line);//response는 StringBuilder
}
reader.close();
// 응답 내용 출력
//System.out.println("응답 내용: " + response.toString());

result = (JSONObject) new JSONParser().parse(response.toString());//Json형식으로 파싱
// 연결 종료
connection.disconnect();

Java에서 Json라이브러리 사용

implementation group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1'
을 gradel에 추가하여 사용
google에서 지원하는 json 오픈 라이브러리이다.

Json값을 ArrayList로

public static ArrayList<Truck> JsonToTruckArr(JSONObject response){
        ArrayList<Truck> trucks= new ArrayList<>();
        JSONArray responseArr=(JSONArray)response.get("trucks");//trucks를 key로 가지는 jsonArray가져옴

        for(int i=0;i<responseArr.size();i++){//jsonArray에 속해있는 JSONObject의 각 key를 get하여 arrayList로 파싱
            JSONObject truck=(JSONObject) responseArr.get(i);
            trucks.add(new Truck(ObjectToInt(truck.get("id")),ObjectToInt(truck.get("location_id")),ObjectToInt(truck.get("loaded_bikes_count"))));
        } //ObjectToInt는 따로 만든메소드 Object-> int로 바꿔준다.
        return trucks;
    }

ArrayList값을 Json으로

public static JSONObject CommandsArrToJson(ArrayList<Command> commands){
        JSONArray jsonArray=new JSONArray();

        for(int i=0;i<commands.size();i++){//JsonObject안에 JsonArray넣으면서 key설정해줌
            JSONObject jsonObject=new JSONObject();
            jsonObject.put("truck_id",commands.get(i).getTruck_id());
            jsonObject.put("command",commands.get(i).getCommand());
            jsonArray.add(jsonObject);
        }
        JSONObject answer=new JSONObject();
        answer.put("commands",jsonArray);
        return answer;
    }

직접 구현해본 카카오2차 코딩테스트!!
2021카카오2차 구현 주소

profile
끊임없이

0개의 댓글