본문 바로가기
Framework & Library/Spring Framework

[Spring Framework] : Rest 기반 Open API Server 구현 (1부)

by 오주현 2021. 11. 3.
반응형

 

DB에 테이블을 만들어주고 값을 넣어줍니다.

복합키를 주고 각 데이터의 크기와 형식을 정해주고 간단한 주석을 넣었습니다.

 

데이터 베이스에 값도 넣어줍니다.

 


전에 만들어둔 프로젝트를 복사해서 이름을 바꿔준뒤 서버에 연결해 줍니다.

- OpenApiPrj 

- SpringPRJ2.0

두 프로젝트로 진행합니다.

 

 


OpenApiPr

	<!-- RequestBody 사용시, JSON 변환이 안되는 경우 추가함 -->
	<dependency>
	<groupId>com.google.code.gson</groupId>
	<artifactId>gson</artifactId>
	<version>2.8.6</version>
	</dependency>

pom.xml


package poly.dto;

public class AccStatDTO {

	private String yyyymm;
	private String a_code;
	private String a_name;
	private String stat_a;
	private String stat_b;
	private String reg_id;
	private String reg_dt;
	private String chg_id;
	private String chg_dt;
	
	public String getYyyymm() {
		return yyyymm;
	}
	public void setYyyymm(String yyyymm) {
		this.yyyymm = yyyymm;
	}
	public String getA_code() {
		return a_code;
	}
	public void setA_code(String a_code) {
		this.a_code = a_code;
	}
	public String getA_name() {
		return a_name;
	}
	public void setA_name(String a_name) {
		this.a_name = a_name;
	}
	public String getStat_a() {
		return stat_a;
	}
	public void setStat_a(String stat_a) {
		this.stat_a = stat_a;
	}
	public String getStat_b() {
		return stat_b;
	}
	public void setStat_b(String stat_b) {
		this.stat_b = stat_b;
	}
	public String getReg_id() {
		return reg_id;
	}
	public void setReg_id(String reg_id) {
		this.reg_id = reg_id;
	}
	public String getReg_dt() {
		return reg_dt;
	}
	public void setReg_dt(String reg_dt) {
		this.reg_dt = reg_dt;
	}
	public String getChg_id() {
		return chg_id;
	}
	public void setChg_id(String chg_id) {
		this.chg_id = chg_id;
	}
	public String getChg_dt() {
		return chg_dt;
	}
	public void setChg_dt(String chg_dt) {
		this.chg_dt = chg_dt;
	}
	
	
}

AccStatDTO


package poly.persistance.mapper;

import java.util.List;

import config.Mapper;
import poly.dto.AccStatDTO;

@Mapper("AccStatMapper")
public interface IAccStatMapper {
	
	List<AccStatDTO> getAccStatInfo(AccStatDTO pDTO) throws Exception;

}

IAccStatMapper


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- JAVA와 연결할 Mapper 파일 설정 -->
<mapper namespace="poly.persistance.mapper.IAccStatMapper">
	
	<!-- 회원 가입하기(회원정보 등록하기) -->
	<select id="getAccStatInfo" parameterType="AccStatDTO" resultType="AccStatDTO">
		SELECT
			YYYYMM,
			A_CODE,
			A_NAME,
			STAT_A,
			STAT_B,
			REG_ID,
			REG_DT,
			CHG_ID,
			CHG_DT
		FROM
			ACCIDENT_STAT
		WHERE
			1=1
		<!-- AccStatDTO의 yyyymm 변수의 값이 존재한다면 ..
		일반적으로 아무 값이 있는 경우에 대해 조건문을 작성하면, 
		반ㄷ싀 NULL체크와 ''인지 확인한느 구분이 필요하다.
		그러나 myBatis에서 NULL 체크 로직 없이, (! = '' => ''값이 아니라면)만
		NULL 값을 강제로 '' 변경하였기 때문이다.
		따라서 !=''만 작성한다.-->
		<if test='yyyymm != ""'>
		<![CDATA[
		AND YYYYMM = #{yyyymm}
		]]>
		</if>
		
		<!-- AccStatDTO의 a_code 변수의 값이 존재한다면 -->
		<if test='a_code != ""'>
		<![CDATA[
		AND A_CODE = #{a_code}
		]]>
		</if>
		
	</select>
</mapper>

AccStatmapper


package poly.service;

import java.util.List;

import poly.dto.AccStatDTO;

public interface IAccStatService {

	
	List<AccStatDTO> getAccStatInfo(AccStatDTO pDTO) throws Exception;
}

IAccStatService


package poly.service.impl;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;

import poly.dto.AccStatDTO;
import poly.persistance.mapper.IAccStatMapper;
import poly.service.IAccStatService;

@Service("AccStatService")
public class AccStatService implements IAccStatService {

	@Resource(name ="AccStatMapper")
	private IAccStatMapper accStatMapper;
	
	private Logger log = Logger.getLogger(this.getClass());
	
	//교통사고 정보 가져오기
	@Override
	public List<AccStatDTO> getAccStatInfo(AccStatDTO pDTO) throws Exception {

		log.info(this.getClass().getName() + ".geAccStatInfo start !");
		
		//교통 사고 조회
		List<AccStatDTO> rList = accStatMapper.getAccStatInfo(pDTO);
		
		//참조형 변수는 무조건 오류 방지를 위해 널처리를 한다.
		if(rList ==null) {
			rList = new ArrayList<AccStatDTO>();
		}
		
		log.info(this.getClass().getName() + ".getAccStatInfo end !");
		
		return rList;
	}

}

AccStatService


package poly.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import poly.dto.AccStatDTO;
import poly.service.impl.AccStatService;
import poly.util.CmmUtil;

@Controller("AccStatController")
public class AccStatController {

	private Logger log = Logger.getLogger(this.getClass());
	
	@Resource(name = "AccStatService")
	private AccStatService accStatService;
	
	/*교통사고 정보 조회를 위한 Open API
	 *ResponseBody 어노테이션은 jsp로 값을 전달하지 않고, 바로 결과를 제공할 때 사용한다.
	 *일반적으로Map 객체를 통해 return을 하면 Json형태로 변환되서 출력한다.
	 *ResponseBody를 사용하면, ModelMap 객체를 사용할 필요가 없다.
	 *따라서 getAccStatInfo 함수의 파라미터에서 ModelMap을 제외시킨다.
	*/
	
	@RequestMapping(value = "accStat/getAccStatInfo")
	@ResponseBody
	public Map<String, Object> getAccStatInfo(HttpServletRequest request, HttpServletResponse response)
	throws Exception{

		log.info(this.getClass().getName() + ".getFoodInfoFromWEB start !");
		
		// 처리 결과를 전달하기 위한 변수
		Map<String, Object> rMap = new HashMap<String, Object>();
		
		// 교통사고 년월
		String yyyymm = CmmUtil.nvl(request.getParameter("yyyymm"));
		
		//사고 구분
		String a_code = CmmUtil.nvl(request.getParameter("a_code"));
		
		// 교통 사고 정보를 저장하기 위한 파라미터 저장하기
		AccStatDTO pDTO = new AccStatDTO();
		
		pDTO.setYyyymm(yyyymm);
		pDTO.setA_code(a_code);
		
		// 교통사고 조회
		List<AccStatDTO> rList = accStatService.getAccStatInfo(pDTO);
		
		if(rList == null) {
			rList = new ArrayList<AccStatDTO>();
		}
		
		rMap.put("reqYYYYMM", yyyymm); //호출한 파라미터 : yyyymm
		rMap.put("reqAcode", a_code); //호출한 파라미터 : a_code
		rMap.put("recordCnt", rList.size()); // 조회된 교통사고 정보 건수
		rMap.put("res", rList);	// 조회된 교통사고 정보
		
		log.info(this.getClass().getName() + ".getFoodInfoFromWEB end !");
		
		return rMap;
	}
}

AccStatController


서버를 돌려보면 데이터 베이스에 넣은 값들이 나옵니다.

 

JSON 웹 뷰어를 통해 보면 조금 더 편하게 볼 수 있습니다.

http://jsonviewer.stack.hu/

 

Online JSON Viewer

 

jsonviewer.stack.hu

 

페이지에 나온 값을 복사해서 뷰어에 넣어주고 포멧을 눌러줍니다.

 

웹 페이지에서 나온 그대로 보는 것 보다 확실히 보기 편하게 나오는 것을 확인할 수 있습니다.

반응형

댓글