스프링 부트에서 API를 개발하려고 하는 클래스에는 가장 위에 @RestController를 적어줘야 한다.
@RestController에서 getter가 있는 객체를 반환하면 JSON으로 반환해준다.
이는 클래스를 api의 진입 지점으로 만드는 것이고, 이 클래스 안에 메소드에 접근할 수 있다.
1. GET API 만들기
아래는 간단한 덧셈을 하는 코드이다.
@RestController
public class CalculatorController {
@GetMapping("/add") // GET /add
public int addTwoNumbers(@RequestParam int number1, @RequestParam int number2){
return number1 + number2;
}
}
@RequestParam?
- 주어지는 쿼리(GET 요청 시에 URI 주소로 들어오는 값)를 함수 파라미터( number1, number2 )에 넣는다는 뜻이다.
위와 같이 postman으로 실행 시 응답을 잘 반환해 줌을 확인할 수 있다.
변수가 아닌 객체로 받을 수는 없나요?
-> 있다. DTO로 만들면 된다.
DTO란 Data Transfer Object로써 데이터를 외부에서 컨트롤러로 전달하는 역할을 하는 객체이다.
package com.group.libraryapp.dto.calculator.request;
public class CalculatorAddRequest {
private final int number1;
private final int number2;
public CalculatorAddRequest(int number1, int number2) {
this.number1 = number1;
this.number2 = number2;
}
public int getNumber1() {
return number1;
}
public int getNumber2() {
return number2;
}
}
이와 같이 DTO 클래스를 생성해 준다.
이후, API 코드를 다음과 같이 수정해 준다.
@RestController
public class CalculatorController {
@GetMapping("/add")
public int addTwoNumbers(CalculatorAddRequest request) {
return request.getNumber1() + request.getNumber2();
}
}
이러면 똑같이 작동한다. 변수가 많아질 경우 이와 같이 객체로 하면 깔끔하게 구현할 수 있다.
2. POST API 만들기
POST는 uri에 데이터를 담아 보내는 GET 방식과 달리 BODY 부분에 json으로 데이터를 담아 보내면 된다.
이번에도 DTO로 값을 받아보도록 하겠다.
public class CalculatorMultiplyRequest {
private int number1;
private int number2;
public int getNumber1() {
return number1;
}
public int getNumber2() {
return number2;
}
}
컨트롤러도 다음과 같이 추가해준다.
@RestController // 주어진 Class를 Controller로 등록한다.
public class CalculatorController {
@PostMapping("/multiply") // POST /multiply
public int multiplyTwoNumbers(@RequestBody CalculatorMultiplyRequest request) {
return request.getNumber1() * request.getNumber2();
}
}
여기서, @RequestBody 어노테이션을 사용해야 @RequestParam마냥 Body로 오는 값을 받을 수 있다.!
Postman으로 테스트 시 HTTP 메시지 요청과 응답을 주고 받음을 확인 할 수 있다. 굿굿
728x90
'개발 공부 기록 > 02. Spring Boot' 카테고리의 다른 글
JPA, Hibernate, Spring Data JPA란? (0) | 2023.12.11 |
---|---|
스프링 컨테이너를 다루는 방법 (0) | 2023.12.10 |
스프링 빈과 스프링 컨테이너란? (0) | 2023.12.10 |
Spring Boot에서 Database 접근해서 사용하기 (2) | 2023.12.07 |
@SpringBootApplication과 서버 (1) | 2023.12.03 |