inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

과제 2. API

채 수
0

문제 1. 두 수를 입력하면 다음과 같은 결과가 나오는 GET API를 만들어 보자!

// DTO
package com.group.libraryapp.dto.calculator.request;

public class Calculator {
    public int add;
    public int minus;
    public int multiply;

    public Calculator(int num1, int num2) {
        this.add = num1 + num2;
        this.minus = num1 - num2;
        this.multiply = num1 * num2;
    }
}
package com.group.libraryapp.controller.HW;

import com.group.libraryapp.dto.calculator.request.Calculator;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HWController {
    @GetMapping("/api/v1/calc")
    public Calculator Numbers (@RequestParam("num1") int num1, @RequestParam("num2") int num2) {
        return new Calculator(num1, num2);
    }
}

Calculator DTO를 작성하고 매개변수를 받아 작업을 수행하도록 컨트롤러를 설정했다.

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

package com.group.libraryapp.dto.HW;

public class DayOfTheWeekResponse {
    private String dayOfTheWeek;

    public DayOfTheWeekResponse(String dayOfTheWeek) {
        this.dayOfTheWeek = dayOfTheWeek;
    }

    public String getDayOfTheWeek() {
        return dayOfTheWeek;
    }

    public void setDayOfTheWeek(String dayOfTheWeek) {
        this.dayOfTheWeek = dayOfTheWeek;
    }
}

응답을 위한 DTO 클래스를 생성했다. 이 클래스는 요일 정보를 담을 수 있는 필드가 있다.

@GetMapping("/api/v1/day-of-the-week")
    public DayOfTheWeekResponse getDayOfTheWeek(@RequestParam("date") String dateString) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate date = LocalDate.parse(dateString, formatter);
        DayOfWeek dayOfWeek = date.getDayOfWeek();

        return new DayOfTheWeekResponse(dayOfWeek.toString().substring(0, 3));
    }

DayOfWeek 객체의 toString() 메서드를 사용하여 요일을 문자열로 변환했다. 그 후, substring 메서드를 사용하여 앞의 3글자만 추출하여 "MON", "TUE" 등의 형태로 만들었다. 이 문자열을 DayOfTheWeekResponse 객체에 담아 반환한다. 요청을 보내면 JSON 형식의 응답을 받게 된다.

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

JSON 형태의 Body를 받아 이를 문자열이나 정수 타입으로 반환해줘야한다.

// DTO
package com.group.libraryapp.dto.HW;

import java.util.List;

public class NumbersRequest {
    private List<Integer> numbers;

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

    public void setNumbers(List<Integer> numbers) {
        this.numbers = numbers;
    }
}
@PostMapping("/api/v1/sum")
    public int calculateSum(@RequestBody NumbersRequest numbersRequest) {
        int sum = 0;
        for (Integer number : numbersRequest.getNumbers()) {
            sum += number;
        }
        return sum;
    }

JSON 데이터를 @RequestBody를 통해 NumbersRequest 객체로 변환했다.
그리고 서버는 요청된 숫자들의 총합을 계산하여 반환했다.

최종 코드

package com.group.libraryapp.controller.HW;

import com.group.libraryapp.dto.HW.DayOfTheWeekResponse;
import com.group.libraryapp.dto.HW.NumbersRequest;
import com.group.libraryapp.dto.calculator.request.Calculator;
import org.springframework.web.bind.annotation.*;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

@RestController
public class HWController {
    @GetMapping("/api/v1/calc")
    public Calculator Numbers (@RequestParam("num1") int num1, @RequestParam("num2") int num2) {
        return new Calculator(num1, num2);
    }

    @GetMapping("/api/v1/day-of-the-week")
    public DayOfTheWeekResponse getDayOfTheWeek(@RequestParam("date") String dateString) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate date = LocalDate.parse(dateString, formatter);
        DayOfWeek dayOfWeek = date.getDayOfWeek();

        return new DayOfTheWeekResponse(dayOfWeek.toString().substring(0, 3));
    }

    @PostMapping("/api/v1/sum")
    public int calculateSum(@RequestBody NumbersRequest numbersRequest) {
        int sum = 0;
        for (Integer number : numbersRequest.getNumbers()) {
            sum += number;
        }
        return sum;
    }
}

인프런워밍업클럽

답변 0