IT/development

[springBoot] ๊ณตํœด์ผ ์กฐํšŒ API

์•Œ ์ˆ˜ ์—†๋Š” ์‚ฌ์šฉ์ž 2023. 5. 15.

Open API ์ด์šฉ

service

package kr.test.dev.Service.api;


import kr.test.dev.Service.annual.AnnualService;
import kr.test.dev.Vo.HolidayItemVo;
import kr.test.dev.Vo.HolidayResponseVo;
import kr.test.dev.Vo.HolidayVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.net.URI;
import java.util.ArrayList;
import java.util.List;

@Service
@Slf4j
//๊ณต๊ณต๋ฐ์ดํ„ฐ ํŠน์ผ์ •๋ณด API ์กฐํšŒ
public class ApiServiceImpl implements ApiService{

    @Autowired AnnualService annualService;

    private final String holidayURL = "https://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService/getHoliDeInfo";

    @Value("${openApi.serviceKey}")
    //์˜คํ”ˆ API ํ‚ค๋Š” application.yml์—์„œ ๋ถˆ๋Ÿฌ์˜ด
    private String serviceKey;

    /**
     * ํŠน์ผ์ •๋ณด api ์กฐํšŒ
     * @param year
     * @return
     */
    @Override
    public List<HolidayItemVo> getholidayInfo(String year) {

        RestTemplate restTemplate;
        // api ์ •๋ณด ๊ฒฐ๊ณผ๊ฐ’ ์ €์žฅ์šฉ list
        List<HolidayItemVo> items = new ArrayList<>();
        // ๊ณตํœด์ผ ์ •๋ณด db ์ €์žฅ์šฉ vo
        HolidayVo holidayVo;
        
        // 1~12์›” ๊ณตํœด์ผ ์ •๋ณด ์กฐํšŒ
        for (int i = 1; i < 13; i++) {

            String solMonth = (i < 10) ? "0" + i : String.valueOf(i);

                try {
                URI requestURI = new URI(holidayURL + "?serviceKey=" + serviceKey + "&solYear=" + year + "&solMonth=" + solMonth);
//                log.info("ํŠน์ผ์ •๋ณด requestURI = [{}]", requestURI);
				// requestURI ํ˜•์‹ -> https://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService/getHoliDeInfo?serviceKey=๋ฐœ๊ธ‰๋ฐ›์€์„œ๋น„์Šคํ‚ค&solYear=2023(๋…„๋„)&solMonth=01(์›”)
                restTemplate = new RestTemplate();
                //api ๊ฒฐ๊ณผ๊ฐ’
                HolidayResponseVo response = restTemplate.getForObject(requestURI, HolidayResponseVo.class);
                
                items = response.getBody().getItems();
                    // ๊ณตํœด์ผ ์ •๋ณด db ์ €์žฅ
                    for (HolidayItemVo item : items) {
                        if ("Y".equals(item.getIsHoliday())) {
                            holidayVo = new HolidayVo();
                            holidayVo.setHolidayDate(item.getLocdate());
                            holidayVo.setHolidayNm(item.getDateName());
//                            annualService.insertHolidayInfo(holidayVo);
                        }
                    }
                for (HolidayItemVo item : items) log.info("ํŠน์ผ ์ •๋ณด = [{}]", item.toString());
            } catch (Exception e) {
                log.info("Exception :: {}", e.getMessage());
            }
        }
        return items;
    }
}

controller

    /**
     * ํŠน์ผ ์ •๋ณด ์กฐํšŒ
     * @return
     */
    @GetMapping(value = "holiday")
    @ResponseBody
    public List<HolidayItemVo> holidayList(@RequestParam String year) {
        // ํ•ด๋‹นํ•˜๋Š” ๋…„๋„์˜ ํŠน์ผ์ •๋ณด๋ฅผ ์กฐํšŒ ํ›„ db์— ์ €์žฅ
        return apiService.getholidayInfo(year);
    }

HolidayItemVo

package kr.test.dev.Vo;

import lombok.Data;

import javax.xml.bind.annotation.XmlRootElement;

@Data
@XmlRootElement(name = "item")
//ํŠน์ผ item vo
public class HolidayItemVo {

    private String locdate;
    private String dateKind;
    private String isHoliday;
    private String dateName;
    private int seq;
}

HolidayItemsVo(list)

package kr.test.dev.Vo;

import lombok.Data;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;

@Data
@XmlRootElement(name = "body")
public class HolidayItemsVo {

    private List<HolidayItemVo> items;

    @XmlElementWrapper(name = "items")
    @XmlElement(name = "item")
    public List<HolidayItemVo> getItems() {
        return items;
    }
}

 

HolidayResponseVo

package kr.test.dev.Vo;

import lombok.Data;

import javax.xml.bind.annotation.XmlRootElement;
import java.util.Map;

@Data
@XmlRootElement(name = "response")
public class HolidayResponseVo {

    private Map<String, Object> header;
    private HolidayItemsVo body;
}

HolidayVo(db ์ €์žฅ์šฉ)

package kr.test.dev.Vo;

import kr.renosoft.portal.common.CommonVo;
import lombok.Data;

@Data
public class HolidayVo extends CommonVo {

    private int holidaySno;             // ๊ณตํœด์ผ ์ˆœ๋ฒˆ
    private String holidayDate;        // ๊ณตํœด์ผ ๋‚ ์งœ
    private String holidayNm;           // ๊ณตํœด์ผ ๋ช…์นญ
}

๊ฒฐ๊ณผ๊ฐ’(xml์„ java๋กœ ๋ณ€ํ™˜)

๊ฒฐ๊ณผ๊ฐ’(xml)

์ฐธ์กฐ: ์–ด๋–ค ๋ธ”๋กœ๊ทธ๋ถ„ ์ด์—ˆ๋Š”๋ฐ ๊ธฐ์–ต์ด ์•ˆ๋‚œ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€