[워밍업클럽] BE 1기 #과제2
문제 1두 수를 입력하면, 다음과 같은 결과가 나오는 GET API를 만들어 보자!path : /api/v1/calc쿼리 파라미터 : num1, num2 { "add": 덧셈결과, "minus": 뺄셈결과, "multiply": 곱셈결과 } [예시] GET /api/v1/calc?num1=10&num2=5{ "add": 15, "minus": 5, "multiply": 50 } 풀이 >@RestController public class CalculatorController { @GetMapping("/api/v1/calc") public CalculatorAddMinusMultiplyResponse calculateTwoNumbers( @RequestParam int num1, @RequestParam int num2 ){ return new CalculatorAddMinusMultiplyResponse(num1 + num2, num1 - num2, num1 * num2); } } num1, num2 두 수를 @RequestParam 으로 쿼리 값으로 받아 덧셈, 뺄셈, 곱셈 3가지 연산 결과 값을 CalculatorAddMinusMultiplyResponse생성자의 매개변수로 전달하여 CalculatorAddMinusMultiplyResponse형태로 결과를 반환받으며, public class CalculatorAddMinusMultiplyResponse { private final int add, minus, multiply; public CalculatorAddMinusMultiplyResponse(int add, int minus, int multiply) { this.add = add; this.minus = minus; this.multiply = multiply; } public int getAdd() { return add; } public int getMinus() { return minus; } public int getMultiply() { return multiply; } } CalculatorAddMinusMultiplyResponse는 [예시]와 같은 형식으로 만들기 위해 구현하였다. 문제 2날짜를 입력하면, 몇 요일인지 알려주는 GET API를 만들어 보자! path와 쿼리 파라미터는 임의로 만들어도 상관없다.[예시] GET /api/v1/day-of-the-week?day=2023-01-01{ "dayOfTheWeek": "MON" } 풀이 >@RestController public class DateController { @GetMapping("/api/v1/day-of-the-week") public DayOfWeekResponse dayOfWeek(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd")LocalDate day){ return new DayOfWeekResponse(day.getDayOfWeek().toString().substring(0,3)); } }쿼리값으로 LocalDateday를 받은 후 day에 해당하는 요일을 string으로 변환한 후 해당 문자열의 0번인덱스부터 2번까지 자른 값을 반환한다.public class DayOfWeekResponse { String dayOfTheWeek; public DayOfWeekResponse(String dayOfWeek) { this.dayOfTheWeek = dayOfWeek; } public String getDayOfTheWeek() { return dayOfTheWeek; } }DayOfWeekResponse는 [예시]와 같은 형식으로 만들기 위해 구현하였다. 문제 3여러 수를 받아 총 합을 반환하는 POST API를 만들어 보자! API에서 받는 Body는 다음과 같은 형태이다. ( HINT: 요청을 받는 DTO에서 List를 갖고 있으면 JSON의 배열을 받을 수 있습니다){ "numbers": [1, 2, 3, 4, 5] }반환결과 🛑주의! 반환결과는 JSON이 아니다!15풀이 >public class AddNumberRequest { List<Integer>numbers = new ArrayList<>(); public AddNumberRequest(){} public AddNumberRequest(List<Integer>numbers){ this.numbers = numbers; } public List<Integer> getNumbers() { return numbers; } }JSON 배열을 받기 위해 AddNumberRequest에 List<Integer>numbers를 구현하였다.@RestController public class NumberController { @PostMapping("/api/v1/add") public int addNumbers(@RequestBody AddNumberRequest request){ int sum = 0; for (int i : request.getNumbers()){ sum += i; } return sum; } }AddNumberRequest구현시 에러가 발생하였고, 기본생성자 코드를 추가하여 해결하였다. 이유를 찾아보니 NumberController에서 받은 AddNumberRequest요청을 java객체로 변경할때 역직렬화 과정이 수행되는데 그 과정에서 ObjectMapper는 @RequestBody를 통해 받은 AddNumberRequest의 기본생성자를 사용한다. 그렇기때문에 기본 생성자가 필요하다.강의- 자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지], https://inf.run/XKQg출처https://dev-coco.tistory.com/31https://m.blog.naver.com/sosow0212/223077995727