Spring

[인프런 워밍업 클럽] BE 2번째 과제 - GET, POST API 만들기

yes_truly 2024. 2. 20. 20:43
728x90

🔑문제 1

 

 

🔑코드

  • Controller
package com.group.libraryapp.controller.calculator;


import com.group.libraryapp.dto.caclulator.request.CalculatorRequest;
import com.group.libraryapp.dto.caclulator.response.CalculatorResponse;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api/v1")
public class CalculatorController {

  @GetMapping("/calc")
  public CalculatorResponse calculator(@RequestBody CalculatorRequest request){
    return new CalculatorResponse(request);
  }

}

먼저 @RequestMapping을 이용해 문제에 나와있는 api의 공통된 부분을 한 번에 작성해줬다.

num1, num2는 파라미터로 받아도 되지만 가독성과 효율성을 위해 body로 받는 코드로 작성했다.

 

  • 요청 DTO
package com.group.libraryapp.dto.caclulator.request;

public class CalculatorRequest {
  private int num1;
  private int num2;

  public int getNum1() {
    return num1;
  }

  public int getNum2() {
    return num2;
  }

}

 

  • 응답 DTO
package com.group.libraryapp.dto.caclulator.response;

import com.group.libraryapp.dto.caclulator.request.CalculatorRequest;

public class CalculatorResponse {
  private int add;
  private int minus;
  private int multiply;

  public CalculatorResponse(CalculatorRequest request){
    this.add = request.getNum1()+ request.getNum2();
    this.minus = request.getNum1()- request.getNum2();
    this.multiply = request.getNum1()* request.getNum2();
  }

  public int getAdd() {
    return add;
  }

  public int getMinus() {
    return minus;
  }

  public int getMultiply() {
    return multiply;
  }
}

 

 

  • Post Man 테스트 결과

문제 요구사항과 일치하는 결과가 반환되었다.

 

 


 

🔑문제 2

 

🔑코드

  • Controller
@GetMapping("/day-of-the-week")
  public DateResponse calculateDay(@RequestBody DateRequest request){
    return new DateResponse(request);
  }

DateRequest를 바디로 받았다. 그런데 굳이 바디로 받을 필요는 없을 듯?

 

  • 요청 DTO
package com.group.libraryapp.dto.caclulator.request;

import java.time.LocalDate;

public class DateRequest {
  private LocalDate date;

  public LocalDate getDate() {
    return date;
  }
}

 

  • 응답 DTO
package com.group.libraryapp.dto.caclulator.response;

import com.group.libraryapp.dto.caclulator.request.DateRequest;
public class DateResponse {
  private String dayOfWeek;

  public String getDayOfWeek() {
    return dayOfWeek.substring(0,3);
  }

  public DateResponse(DateRequest request) {
    this.dayOfWeek = request.getDate().getDayOfWeek().toString();
  }
}

 

문제의 요구 사항을 보면 요일이 MONDAY처럼 전체가 출력되는게 아니라 앞의 세 글자만 출력되면 되기 때문에 getter에서 substring을 이용해 문자를 세 글자만 나오도록 해줬다.

 

  • Post Man 테스트 결과

 

 


 

 

🔑문제 3

🔑코드

  • Controller
@PostMapping("/sum")
  public Integer addNumbers(@RequestBody NumsRequest request){
    int answer = 0;

    for(int item : request.getNumbers()) {
      answer+=item;
    }
    return answer;
  }

반환결과가 JSON이 아니라고 문제에 명시되어있어서 Integer를 반환할 수 있도록 해주었다.

이 문제에서는 응답 DTO를 사용하지 않고 반복문으로 계산해서 결과값을 반환해줬다.

 

  • 요청 DTO
package com.group.libraryapp.dto.caclulator.request;

import java.util.List;

public class NumsRequest {
  private List<Integer> numbers;

  public List<Integer> getNumbers() {
    return numbers;
  }

  public NumsRequest(List<Integer> numbers) {
    this.numbers = numbers;
  }
  public NumsRequest(){}
}

기본 생성자를 작성하지 않으면 500에러가 발생했었어서 기본 생성자도 함께 작성해줬다.

 

  • Post Man 테스트 결과

 

728x90