과제 2. API
0
문제 1. 두 수를 입력하면 다음과 같은 결과가 나오는 GET API를 만들어 보자!
// DTO
package com.group.libraryapp.dto.calculator.request;
public class Calculator {
public int add;
public int minus;
public int multiply;
public Calculator(int num1, int num2) {
this.add = num1 + num2;
this.minus = num1 - num2;
this.multiply = num1 * num2;
}
}package com.group.libraryapp.controller.HW;
import com.group.libraryapp.dto.calculator.request.Calculator;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HWController {
@GetMapping("/api/v1/calc")
public Calculator Numbers (@RequestParam("num1") int num1, @RequestParam("num2") int num2) {
return new Calculator(num1, num2);
}
}Calculator DTO를 작성하고 매개변수를 받아 작업을 수행하도록 컨트롤러를 설정했다.
문제 2. 날짜를 입력하면, 몇 요일인지 알려주는 GET API를 만들어보자!
package com.group.libraryapp.dto.HW;
public class DayOfTheWeekResponse {
private String dayOfTheWeek;
public DayOfTheWeekResponse(String dayOfTheWeek) {
this.dayOfTheWeek = dayOfTheWeek;
}
public String getDayOfTheWeek() {
return dayOfTheWeek;
}
public void setDayOfTheWeek(String dayOfTheWeek) {
this.dayOfTheWeek = dayOfTheWeek;
}
}응답을 위한 DTO 클래스를 생성했다. 이 클래스는 요일 정보를 담을 수 있는 필드가 있다.
@GetMapping("/api/v1/day-of-the-week")
public DayOfTheWeekResponse getDayOfTheWeek(@RequestParam("date") String dateString) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse(dateString, formatter);
DayOfWeek dayOfWeek = date.getDayOfWeek();
return new DayOfTheWeekResponse(dayOfWeek.toString().substring(0, 3));
}DayOfWeek 객체의 toString() 메서드를 사용하여 요일을 문자열로 변환했다. 그 후, substring 메서드를 사용하여 앞의 3글자만 추출하여 "MON", "TUE" 등의 형태로 만들었다. 이 문자열을 DayOfTheWeekResponse 객체에 담아 반환한다. 요청을 보내면 JSON 형식의 응답을 받게 된다.
문제 3. 여러 수를 받아 총 합을 반환하는 POST API를 만들어 보자!
JSON 형태의 Body를 받아 이를 문자열이나 정수 타입으로 반환해줘야한다.
// DTO
package com.group.libraryapp.dto.HW;
import java.util.List;
public class NumbersRequest {
private List<Integer> numbers;
public List<Integer> getNumbers() {
return numbers;
}
public void setNumbers(List<Integer> numbers) {
this.numbers = numbers;
}
}@PostMapping("/api/v1/sum")
public int calculateSum(@RequestBody NumbersRequest numbersRequest) {
int sum = 0;
for (Integer number : numbersRequest.getNumbers()) {
sum += number;
}
return sum;
}JSON 데이터를 @RequestBody를 통해 NumbersRequest 객체로 변환했다.
그리고 서버는 요청된 숫자들의 총합을 계산하여 반환했다.
최종 코드
package com.group.libraryapp.controller.HW;
import com.group.libraryapp.dto.HW.DayOfTheWeekResponse;
import com.group.libraryapp.dto.HW.NumbersRequest;
import com.group.libraryapp.dto.calculator.request.Calculator;
import org.springframework.web.bind.annotation.*;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
@RestController
public class HWController {
@GetMapping("/api/v1/calc")
public Calculator Numbers (@RequestParam("num1") int num1, @RequestParam("num2") int num2) {
return new Calculator(num1, num2);
}
@GetMapping("/api/v1/day-of-the-week")
public DayOfTheWeekResponse getDayOfTheWeek(@RequestParam("date") String dateString) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse(dateString, formatter);
DayOfWeek dayOfWeek = date.getDayOfWeek();
return new DayOfTheWeekResponse(dayOfWeek.toString().substring(0, 3));
}
@PostMapping("/api/v1/sum")
public int calculateSum(@RequestBody NumbersRequest numbersRequest) {
int sum = 0;
for (Integer number : numbersRequest.getNumbers()) {
sum += number;
}
return sum;
}
}
답변 0





