인프런 워밍업 클럽 0기 - 백엔드 코스 (과제 2)

문제 1. GET 방식의 API 만들기

  • path : /api/v1/calc

  • 쿼리 파라미터 : num1, num2

  • response

{
  "add": {덧셈결과},
  "minus": {뺄셈결과},
  "multiply": {곱셈결과}
}

 

해결 방법

  • @RequestParam 어노테이션 활용 방법

     

    @GetMapping("/api/v1/calc")
    public CalculatorAllResponse calcByRequestParam(@RequestParam int num1, @RequestParam int num2){
        return new CalculatorAllResponse(num1+num2,num1-num2,num1*num2);
    }
  • dto 활용 방법

@GetMapping("/api/v2/calc")
public CalculatorAllResponse calcByDto(CalculatorAllRequest request){
    return new CalculatorAllResponse(request.getNum1()+request.getNum2(),request.getNum1()-request.getNum2(),request.getNum1()*request.getNum2());
}
  • 결과 1

image

  • 결과 2

image

 

 

문제 2. 날짜를 입력하면 몇 요일인지 알려주는 GET API 만들기

  • path : /api/v1/day-of-the-week

  • 쿼리 파라미터 : date(yyyy-mm-dd)

  • response

{
  "dayOfTheWeek": "MON"
}

 

해결 방법

이 문제는 사실 모두 LocalDate 패키지를 활용하면 간편하게 해결 가능하다.

@GetMapping("/api/v1/day-of-the-week")
public Map<String,String> getDayOfTheWeek(@RequestParam String date){
    LocalDate today = LocalDate.parse(date, DateTimeFormatter.ISO_DATE);
    Map<String,String> result = new HashMap<>();

    result.put("dayOfTheWeek",today.getDayOfWeek().getDisplayName(TextStyle.SHORT, Locale.US));
    return result;
}
  • 쿼리 파라미터를 통해 받아온 오늘 날짜를 통해 today라는 LocalDate 인스턴스를 생성해준다.

  • LocalDate.getDayOfWeek() 메서드를 통해 해당 날짜의 요일을 반환할 수 있다.

  • 실제로는 1~7 숫자가 반환되고 1 = Mon, 2 = TUE ... 등을 나타낸다.

  • 여기서 getDisplayName() 메서드를 통해 문제에서 요구한 String 형식으로 반환되도록 한다.

image

 

 

문제 3. 여러 수를 받아 총 합을 반환하는 POST API 만들기

  • path : /api/v1/add-all

  • body

{
  "numbers": [1, 2, 3, 4, 5]
}
  • response: int

     

     

     

     

    해결 방법

    @GetMapping("/api/v1/add-all")
    public int addAll(@RequestBody Map<String, List<Integer>> request){
        return request.get("numbers").stream().mapToInt(Integer::intValue).sum();
    }
  • body의 데이터는 @RequestBody 어노테이션을 통해 얻어옵니다.

  • stream()을 통해 리스트 안에 모든 값들을 더해줄 수 있도록 합니다.

image

 

댓글을 작성해보세요.

채널톡 아이콘