[인프런 워밍업 클럽 0기] BE 2일차 과제
문제 1
두 수를 입력하면, 다음과 같은 결과가 나오는 GET API만들기
@GetMapping("api/v1/calc")
public ResponseEntity<?> calc(Calculator request){
CalculatorResponse response = calculatorService.calc(request);
return ResponseEntity.ok(response);
}
CalculatorController에 Post 요청 메서드로 외부 파라미터를 받기 위해 응답 객체로 Calculator 를 정의했습니다.
@Getter
@AllArgsConstructor
public class Calculator {
private final int num1;
private final int num2;
}
calulatorService 정의하여 비지니스 로직을 작성했습니다.
@Service
public class CalculatorService {
public CalculatorResponse calc(Calculator request) {
return new CalculatorResponse(
add(request),
minus(request),
multiply(request));
}
private static int add(Calculator request) {
return request.getNum1() + request.getNum2();
}
private static int minus(Calculator request) {
return request.getNum1() - request.getNum2();
}
private static int multiply(Calculator request) {
return request.getNum1() * request.getNum2();
}
}
응답용 객체로 CalculatorResponse를 정의를 했습니다.
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CalculatorResponse {
private int add;
private int minus;
private int multiply;
}
그리하여 calulatorService에 요청 받은 두 데이터를 처리하여 CalculatorResponse로 ResponseEntity에 담아 200 응답으로 JSON 반환값으로 보냅니다.
문제 2
날짜를 입력하면, 몇 요일인지 알려주는 GET API 만들기
@RestController
@RequestMapping("/api/v1")
public class DateController {
@GetMapping("/getDayOfWeek")
public ResponseEntity<?> getDayOfWeek(@RequestParam String date) {
try {
LocalDate localDate = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
String dayOfTheWeek = localDate.getDayOfWeek().getDisplayName(TextStyle.SHORT, Locale.ENGLISH).toUpperCase();
return ResponseEntity.ok(Collections.singletonMap("dayOfTheWeek", dayOfTheWeek));
} catch (DateTimeException e) {
return ResponseEntity.badRequest().body("Invalid date format");
}
}
}
클라이언트 요청을 처리하고 응답을 반환하기 위해 @RestController 어노테이션을 씁니다.
@GetMapping("/getDayOfWeek") 어노테이션을 써서 GET 요청이 오면 메소드가 호출됩니다.
@RequestParam을 써서 date 파리미터를 받습니다.
받은 날짜 문자열을 'LocalDate' 객체로 반환하기 위해 'DateTimeForrmatter'를 사용하여 날짜 형식을 지정합니다.
그리고 LocalDate 객체의 getDayofWeek() 메서드를 사용하여 요일을 구할 수 있습니다.
마지막으로 JSON 형식으로 반환하기 위해 Collections.singletonMap을 사용하여 간단하게 키-값 쌍을 만들어 JSON형식으로 반환할 수 있습니다.
문제3
여러 수를 받아 총 합을 반환하는 POST API 만들기
@Data
public class CalculatorRequest {
private List<Integer> numbers;
}
클라이언트로 부터 받기 위해 숫자 배열릉 받기 위해 List<Integer> 필드를 가진 클래스를 만듭니다.
@PostMapping("/sum")
public int calculateSum(@RequestBody CalculatorRequest request) {
return request.getNumbers().stream()
.mapToInt(Integer::intValue)
.sum();
}
CalculatorController에 Post요청을 처리하기 위해 @PostMapping 어노테이션을 사용합니다.
@@RequestBody를 사용하여 JSON 데이터를 CalculatorRequest 객체로 변환됩니다.
stream을 돌려 합계를 계산한 다음, 그 결과를 반환합니다.
댓글을 작성해보세요.