[워밍업클럽] BE 1기 #과제2

[워밍업클럽] 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는 [예시]와 같은 형식으로 만들기 위해 구현하였다.

 

image


 

문제 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 배열을 받기 위해 AddNumberRequestList<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의 기본생성자를 사용한다. 그렇기때문에 기본 생성자가 필요하다.

image

강의

- 자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지], https://inf.run/XKQg

출처

https://dev-coco.tistory.com/31

https://m.blog.naver.com/sosow0212/223077995727

댓글을 작성해보세요.