[워밍업클럽] 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));
}
}
쿼리값으로 LocalDate
day를 받은 후 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
출처
댓글을 작성해보세요.