데이터를 front-end에 전달하기 위한 controller 소스를 작업 해줍니다.
@RestController("areaCodeController")
@RequestMapping("/areacode")
@CrossOrigin(origins = "*")
public class AreaCodeController {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
@Qualifier("apiCallComp")
private ApiCallComp apiCallComp;
@Autowired
@Qualifier("koreaAreaCodeService")
private KoreaAreaCodeService koreaAreaCodeService;
@RequestMapping(value="/list", method = RequestMethod.GET)
public String dataList(@ModelAttribute SearchParamVO searchParam) throws Exception{
return apiCallComp.callAccidentAreaInfo(searchParam);
}
@RequestMapping(value="/list/page/{searchPageNo}", method = RequestMethod.GET)
public String dataPageList(@ModelAttribute SearchParamVO searchParam) throws Exception{
return apiCallComp.callAccidentAreaInfo(searchParam);
}
@RequestMapping(value="/year/list", method = RequestMethod.GET)
public ArrayList<String> yearList() throws Exception{
ArrayList<String> yearList = new ArrayList<String>();
yearList.add("2015");
yearList.add("2016");
yearList.add("2017");
yearList.add("2018");
yearList.add("2019");
yearList.add("2020");
yearList.add("2021");
yearList.add("2022");
return yearList;
}
@RequestMapping(value="/sido/list", method = RequestMethod.GET)
public List<AreaCodeDTO> siDoList() throws Exception{
return koreaAreaCodeService.koreaAreaCodeList("1");
}
@RequestMapping(value="/{searchSiDo}/gugun/list", method = RequestMethod.GET)
public List<AreaCodeDTO> gugunList(@ModelAttribute SearchParamVO searchParam) throws Exception{
return koreaAreaCodeService.koreaAreaCodeChildList(searchParam.getSearchSiDo());
}
}
데이터 결과를 body에 담아서 주기 때문에 @RestController 어노테이션을 선언 했습니다.
조회만 있기 때문에 모든 요청은 GET 메소드만 허용을 했고
다른 도메인 요청에 대한 응답을 해줘야 하기 때문에 @CrossOrigin(origins = "*") 을 추가 했습니다.
지금은 연습 이여서 *으로 모든 연결을 허용 하지만 해당 설정을 서비스나 프로젝트에서 사용하시는 경우 허용 영역을
지정 해주는게 좋습니다.
(origins = "http://test1.test.com, http://test2.test.com" 등으로 정의 해줄수 있습니다.)
@Autowired 시 @Qualifier("apiCallComp") 를 명시한 이유는 동일한 인터페이스를 구현한 구현체가 여럿 있을경우 생기는 충돌을 미리 예방하기 위해 습관적으로 코딩 하는 부분 이여서 @Autowired만 사용하여도 무방 합니다.
파리미터를 전달 받을때 @PathVariable 을 포함한 모든 정보를 SearchParamVO에 정의 했기 때문에 @ModelAttribute SearchParamVO 으로 받았지만 restfull url방식에는 맞지 않을거 같아 연습시 참고 하지 않는게 좋을거 같습니다.
SearchParamVO의 내용은 아래와 같습니다.
@Getter
@Setter
@ToString
public class SearchParamVO {
private String searchColumn;
private String searchWord;
private String searchYear="2017";//2017년 이후 데이터는 공공데이터포털에 거의 없어서 2017년으로 기본설정
private String searchSiDo="11680";//서울시
private String searchGuGun="11680";//강남구
private String searchPageNo="1";//1페이지
}
사용하는 api에 존재하는 데이터가 있는 검색 조건을 미리 설정 해서 무조건 데이터가 검색 되게 진행 했습니다.
이 부분 validation 어노테이션 이용해서 검증을 추가 해주셔야 합니다.
front-end부분에도 관련 영역만 만들고 작업은 진행 하지 않았습니다.
back-end는 위의 내용까지 간단하게 정리가 되었습니다. 다음에는 react front-end 작업 내용을 정리 하겠습니다.
'개인프로젝트 > 어린이사고다발지역검색' 카테고리의 다른 글
react 폴더 및 파일 나누기 (0) | 2022.03.18 |
---|---|
react 기본 구조 생성 및 bootstrap연동 (0) | 2022.03.18 |
spring-boot h2database 설정 및 data-jpa 관련 작업 (0) | 2022.03.18 |
OpenApi 호출 @Component 생성 (0) | 2022.03.11 |
backend 프로젝트 생성 및 기본 설정 (0) | 2022.03.11 |