Api 불러오는 법

HUGO·2022년 9월 30일
0

API

목록 보기
1/1

ApiRestController.java(Json으로 받는법)

@RestController
@RequestMapping(value = "/api")
public class ApiRestController {
    
    // JSON api => 127.0.0.1:8080/BOOT1/api/exam1.json
    @GetMapping(value = "/exam1.json")
    public Map<String, Object> exam1GET(){
        Map<String, Object> map = new HashMap<>();
        try {
            // 다른api를 호출해서 결과를 가져온다음
            String url ="http://1.234.5.158:13000/json/exam1.json";

            // spring boot에서 제공하는 rest 템플릿
            RestTemplate restTemplate = new RestTemplate();

            // get을 많이 씀. 그 외에 put,delete,post도 있음
            // 호출하는 URL, 반환타입
            String response = restTemplate.getForObject(url, String.class);

            System.out.println(response.toString());
            // 가공된 데이터를 반환
            // {"ret":"y","data":"123"}
            // 이 부분이 실제로 조금 까다로울 거임.
            JSONObject jobj = new JSONObject(response.toString());
            String ret1 = jobj.getString("ret"); //y
            String ret2 = jobj.getString("data"); //123

            System.out.println(ret1 + "," + ret2);
        }
        catch(Exception e){
            e.printStackTrace();
        }
        return map;
    }

}

ApiRestController.java(XML로 받는법)

// XML api => 127.0.0.1:8080/BOOT1/api/exam100.json
       @GetMapping (value = "/exam100.json")
       public Map<String, Object> exam100GET(){
           Map<String, Object> map = new HashMap<>();
           try {
               // 다른api를 호출해서 결과를 가져온다음
               String url ="http://1.234.5.158:13000/xml/exam1.xml";
               // spring boot에서 제공하는 rest 템플릿
               RestTemplate restTemplate = new RestTemplate();
               // 호출하는 URL, 반환타입
               String response = restTemplate.getForObject(url, String.class);
               // XML을 JSON Object로 변환하기
               JSONObject jobj = XML.toJSONObject(response.toString());
               System.out.println(jobj.toString());
   
               // {"response":{"items":{"item":[{"name":"one","id":1},{"name":"two","id":2},{"name":"three","id":3}]}}} 
               JSONObject jobj1 = jobj.getJSONObject("response")
                                   .getJSONObject("items");
   
               // {"item":[{"name":"one","id":1},{"name":"two","id":2},{"name":"three","id":3}]}                    
               System.out.println(jobj1.toString()); 
   
               // [
               //     {"name":"one","id":1},
               //     {"name":"two","id":2},
               //     {"name":"three","id":3}
               // ]
               // array 반복문 
               JSONArray jarr = jobj1.getJSONArray("item");
               for(int i=0;i<jarr.length();i++){
                   //{"name":"one","id":1}
                   jarr.getJSONArray(i);
               }
           }
           catch(Exception e){
               e.printStackTrace();
           }
           return map;
       }

Exam1DTO.java(DTO를 통해 받아오는 방법)

package com.example.dto;

public class Exam1DTO {
    String ret;
    String data;
}

Exam2DTO.java(DTO를 통해 받아오는 방법)

package com.example.dto;

import java.util.List;

import lombok.Data;

@Data
public class Exam2DTO {
    
    List<Exam1DTO> row;

}

Board1DTO.java(DTO 추가)

package com.example.dto;

import java.sql.Date;

import com.fasterxml.jackson.annotation.JsonFormat;

import lombok.Data;

@Data
public class Board1DTO {
    long _id;
    String title;
    String writer;
    long hit;


    @JsonFormat(pattern = "yyyy-mm-dd HH:mm:ss")
    Date regdate;
}

ApiRestController.java(DTO를 통해 받아오는 방법 (JSON))

 // JSON api => 127.0.0.1:8080/BOOT1/api/exam2.json
    @GetMapping(value = "/exam2.json")
    public Map<String, Object> exam2GET() {
        Map<String, Object> map = new HashMap<>();
        try {
            String url = "http://1.234.5.158:13000/json/exam2.json";
            RestTemplate restTemplate = new RestTemplate();
            Exam2DTO response = restTemplate.getForObject(url, Exam2DTO.class);
            for (Exam1DTO obj : response.getRow() ) {
                System.out.println(obj.toString());
            }
        } 
        catch (Exception e) {
            e.printStackTrace();
        }
        return map;
    }
}
--------------------- 여기까진 xml => string => json => 수동-------------------------

xml => string => json => map => dto로(자동)

ApiRestController.java(자동)

// JSON api => 127.0.0.1:8080/BOOT1/api/exam200.json
    @GetMapping(value = "/exam200.json")
    public Map<String, Object> exam200GET(){
        Map<String, Object> map = new HashMap<>();
        try {
            String url ="http://1.234.5.158:13000/json/exam2.json";
            RestTemplate restTemplate = new RestTemplate();
            // 문자로 받음
            String response = restTemplate.getForObject(
                url, String.class);
            // JSON객체로 변환    
            JSONObject json = new JSONObject(response);    

            ObjectMapper mapper = new ObjectMapper();
            // Map -> DTO변환
            Exam2DTO exam2 = mapper.convertValue(json.toMap(), 
                Exam2DTO.class);
            System.out.println(exam2.getRow().toString());    
        }
        catch(Exception e){
            e.printStackTrace();
        }
        return map;
    }
}

get을 이용한 post 방식으로 전송하는법

 // 127.0.0.1:8080/BOOT1/api/post1.json
    // 지도, 소셜로그인, 공공DB, 결제, 페이 ...
    // 127.0.0.1:8080/BOOT1/api/post1.json
    @GetMapping(value="/post1.json")
    public Map<String, Object> getMethodName() {
        Map<String, Object> map = new HashMap<>();
        try {
            String url ="http://1.234.5.158:13000/json/post1.json";
            
            // ret, data를 정보를 post방식으로 전송
            Map<String, Object> param = new HashMap<>();
            param.put("ret","999");
            param.put("data","000");

            RestTemplate restTemplate = new RestTemplate();
     
            // DTO로 받기, 구조가 복잡하면 String받아서 수동 파싱하기
            Exam1DTO response = restTemplate.postForObject(
                url, param, Exam1DTO.class);
                System.out.println("--------------------------------------");
            System.out.println(response.toString());    
        }
        catch(Exception e){
            e.printStackTrace();
        }
        return map;
    }
profile
갓 신생아 개발자 이야기

0개의 댓글