Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 21 additions & 18 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,41 +1,44 @@
plugins {
id 'org.springframework.boot' version '2.7.4'
id 'io.spring.dependency-management' version '1.0.14.RELEASE'
id 'java'
id 'org.springframework.boot' version '2.7.4'
id 'io.spring.dependency-management' version '1.0.14.RELEASE'
id 'java'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
sourceCompatibility = '11'

configurations {
compileOnly {
extendsFrom annotationProcessor
}
compileOnly {
extendsFrom annotationProcessor
}
}

repositories {
mavenCentral()
mavenCentral()
}

ext {
set('springCloudVersion', "2021.0.4")
set('springCloudVersion', "2021.0.4")
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
implementation group: 'io.github.openfeign', name: 'feign-gson', version: '11.0'
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'

}

dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}

tasks.named('test') {
useJUnitPlatform()
useJUnitPlatform()
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

@EnableFeignClients
@SpringBootApplication
public class SchoolApiBackendApplication {

public static void main(String[] args) {
SpringApplication.run(SchoolApiBackendApplication.class, args);
}
public static void main(String[] args) {
SpringApplication.run(SchoolApiBackendApplication.class, args);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.example.schoolapibackend.client;

import com.example.schoolapibackend.config.FeignConfig;
import com.example.schoolapibackend.domain.SchoolInfo;
import com.example.schoolapibackend.dto.SchoolInfoDto;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

@FeignClient(name = "schoolFeignClient", url = "https://open.neis.go.kr/hub", configuration = FeignConfig.class)
public interface SchoolFeignClient {
@RequestMapping(method = RequestMethod.GET, value = "/schoolInfo")
SchoolInfoDto getSchoolInfo(
@RequestParam(value = "KEY") String key,
@RequestParam(value = "Type") String type,
@RequestParam(value = "pIndex") int pIndex,
@RequestParam(value = "pSize") int pSize);
}
36 changes: 36 additions & 0 deletions src/main/java/com/example/schoolapibackend/common/Decoder.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.example.schoolapibackend.common;

import feign.FeignException;
import feign.Response;
import feign.codec.DecodeException;
import feign.gson.GsonDecoder;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
import java.lang.reflect.Type;

@Slf4j
public class Decoder implements feign.codec.Decoder {

/** 커스텀 디코드 함수
* 헤더 체크가 필요하거나 리턴 데이터 파싱시 특정 로직을 추가하고 싶은경우 사용.
* */
@Override
public Object decode(Response response, Type type) throws IOException, DecodeException, FeignException {
//이상없음
if(response.status() == 200){

log.info("===============응답 200 정상===============");

log.info("============Type 정보 -> ");
log.info(type.getTypeName().toString());

log.info("============Header 정보 -> ");
log.info(response.headers().toString());

}else{
log.info("===============응답 확인필요" + String.valueOf(response.status()) + "===============");
}

return new GsonDecoder().decode(response,type);
}
}
22 changes: 22 additions & 0 deletions src/main/java/com/example/schoolapibackend/config/FeignConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.example.schoolapibackend.config;

import com.example.schoolapibackend.common.Decoder;
import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FeignConfig {

/** feign 로깅 처리*/
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}

/** feign custom decoder */
@Bean
feign.codec.Decoder feignDecoder(){
return new Decoder();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.example.schoolapibackend.controller;

import com.example.schoolapibackend.domain.SchoolInfo;
import com.example.schoolapibackend.dto.SchoolInfoDto;
import com.example.schoolapibackend.service.SchoolFeignService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
public class SchoolController {

private final SchoolFeignService schoolFeignService;

@GetMapping("/schoolInfo")
public SchoolInfoDto getSchoolInfo(
@RequestParam(value = "KEY") String key,
@RequestParam(value = "Type") String type,
@RequestParam(value = "pIndex") int pIndex,
@RequestParam(value = "pSize") int pSize) {

return schoolFeignService.getSchoolInfo(key, type, pIndex, pSize);
}

@PostMapping("/schoolInfo")
public void saveSchoolInfo() {
schoolFeignService.saveSchoolInfo();
}
}
54 changes: 54 additions & 0 deletions src/main/java/com/example/schoolapibackend/domain/SchoolInfo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package com.example.schoolapibackend.domain;

import com.google.gson.annotations.SerializedName;
import lombok.*;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;

@Document
@NoArgsConstructor
@Getter
@AllArgsConstructor
@Setter
@ToString
public class SchoolInfo {

@Id
private String id;

@Indexed
private String educationOfficeCode;
@Indexed
private String educationOfficeName;
@Indexed
private String schoolCode;
@Indexed
private String schoolName;
@Indexed
private String schoolType;
@Indexed
private String locationName;
@Indexed
private String address;
@Indexed
private String addressDetail;
@Indexed
private String coeducationName;
@Indexed
private String highSchoolType;
@Indexed
private String industryClassExist;
@Indexed
private String highSchoolTypeDetail;
@Indexed
private String specialHighSchoolCurriculum;
@Indexed
private String entranceExamPeriod;
@Indexed
private String dayNightType;
@Indexed
private String establishmentDate;
@Indexed
private String schoolAnniversary;
}
Loading