요건
- csv 파일을 읽은 내용을 외부 post api 호출을 해서 등록한다.
repository
dependencies {
implementation 'com.opencsv:opencsv:5.5.2'
implementation group: 'com.squareup.retrofit2', name: 'retrofit', version: '2.7.2'
implementation group: 'com.squareup.retrofit2', name: 'converter-gson', version: '2.7.2'
compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.22'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}
코드
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
public class RetrofitClient {
private static final String BASE_URL = "http://localhost:8082";
public static TestApiService getApiService() {
return getInstance().create(TestApiService.class);
}
private static Retrofit getInstance() {
Gson gson = new GsonBuilder()
.setLenient()
.registerTypeAdapter(LocalDate.class, new LocalDateSerializer())
.registerTypeAdapter(LocalDateTime.class, new LocalDateTimeSerializer())
.registerTypeAdapter(LocalDate.class, new LocalDateDeserializer())
.registerTypeAdapter(LocalDateTime.class, new LocalDateTimeDeserializer())
.registerTypeAdapter(OffsetDateTime.class, new OffsetDateTimeDeserializer())
.setPrettyPrinting()
.create();
return new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson)).build();
}
}
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Headers;
import retrofit2.http.POST;
public interface TestApiService {
@Headers({"Authorization: Bearer 1234"})
@POST("/test")
Call<TestDto> createTest(@Body TestParameter parameter);
}
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Response;
import java.io.IOException;
import java.time.LocalDate;
import java.util.Objects;
public class TestApi {
private final TestApiService apiService;
public TestApi() {
this.apiService = RetrofitClient.getApiService();
}
public void postTest(String test) {
TestParameter testParameter = TestParameter.of(test);
Call<TestDto> post = apiService.createTest(testParameter);
try {
Response<TestDto> res = post.execute();
if (res.isSuccessful()) {
TestDto savedTest = res.body();
System.out.println("## success " + code + " : " + savedTest);
} else {
ResponseBody responseBody = res.errorBody();
System.out.println("## fail " + code + " : " + Objects.requireNonNull(responseBody).string());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
import com.opencsv.CSVReader;
import com.opencsv.exceptions.CsvValidationException;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.Objects;
public class CsvFileReader {
private static final String CSV_FILE_PATH = "sample.csv";
private final TestApi testApi;
public CsvFileReader() {
this.testApi = new TestApi();
}
public void readFromCsv() throws IOException, CsvValidationException {
URL resource = CsvFileReader.class.getClassLoader().getResource(CSV_FILE_PATH);
if (Objects.isNull(resource)) {
throw new IllegalArgumentException(CSV_FILE_PATH + " file not found ");
}
CSVReader reader = new CSVReader(new FileReader(resource.getFile()));
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {
testApi.postTest(nextLine[1]);
}
}
}
import com.opencsv.exceptions.CsvValidationException;
import java.io.IOException;
public class TestRegister {
private final CsvFileReader csvFileReader;
public TestRegister() {
this.csvFileReader = new CsvFileReader();
}
public void registerTest() throws CsvValidationException, IOException {
csvFileReader.readFromCsv();
}
}
import com.opencsv.exceptions.CsvValidationException;
import java.io.IOException;
public class TestApplication {
public static void main(String[] args) throws CsvValidationException, IOException {
TestRegister register = new TestRegister();
register.registerTest();
}
}