의미 | CRUD | 역동성 | 안정성 | Path Variable |
Query Parameter |
DataBody | |
GET | 리소스 취득 | R | O | O | O | O | X |
POST | 리소스 생성, 추가 | C | X | X | O | △ | O |
PUT | 리소스 갱신, 생성 | C / U | O | X | O | △ | O |
DELETE | 리소스 삭제 | D | O | X | O | O | X |
HEAD | 헤더 데이터 취득 | - | O | O | - | - | - |
OPTIONS | 지원하는 메소드 취득 | - | O | - | - | - | - |
TRACE | 요청메시지 반환 | - | O | - | - | - | - |
CONNECT | 프록시 동작의 터널 접속으로 변경 | - | X | - | - | - | - |
✅ GET 방식
package com.example.rest_api.model;
import lombok.Data;
@Data
public class BookQueryParam {
private String category;
private String issuedYear;
private String issuedMonth;
private String issuedDay;
}
- Lombok 클래스
: getter, setter 메소드를 자동적으로 생성해주는 어노테이션
@NoArgsConstructor | 기본 생성자를 만들어주는 어노테이션 |
@AllArgsConstructor | 모든 필드 값을 사용하는 생성자를 만들어주는 어노테이션 |
@RequiredArgsConstructor | final이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 만들어주는 어노테이션 |
@Data | @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor를 모두 사용할 수 있다. |
- Path Variable
: 주소 내에 정보를 전달하는 방법
ex) https://www.foo.bar/user-id/100
https://www.foo.bar/user-id/100/card-id/200
package com.example.rest_api.controller;
//RestApiController.java
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api") //api 주소로 받음
public class RestApiController {
@GetMapping(path = "/hello")
public String hello() {
var html = "<html> <body> <h1> Spring Boot </h1> </body> </html>";
return html;
}
//http://localhost:8080/api/echo/hello
//Get 메서드로 받음
//path 사이 중괄호는 받을 메서드
@GetMapping(path = "/echo/{messagee}/age/{age}/is-man/{isMan}")
public String echo(
//메시지 변수 같이 입력 불가능하면 name 지정해주기
@PathVariable(name = "message") String msg,
//String 타입 변수 외에 다른 타입 받아보기
@PathVariable int age,
@PathVariable boolean isMan
) {
System.out.println("echo message: " + msg);
System.out.println("age message: " + age);
System.out.println("isMan message: " + isMan);
//TODO 대문자로 변환해서 RETURN
return msg.toUpperCase();
}
}
- Query Parameter
: 특정 정보의 필터링을 걸 때 사용한다.
(?로 시작하고, 이어주는 형태는 &로 묶어준다)
ex) https://www.foo.bar/book?user-id=100&category=IT
//RestApiController.java
@RestController
@RequestMapping("/api") //api 주소로 받음
public class RestApiController {
// http://localhost:8080/api/book?category=IT&issuedYear=2023&issued-month=01&issued_day=31
@GetMapping(path = "/book")
public void queryParam(
@RequestParam String category,
@RequestParam String issuedYear,
@RequestParam(name = "issued-month") String issuedMonth,
@RequestParam String issued_day
){
System.out.println(category);
System.out.println(issuedYear);
System.out.println(issuedMonth);
System.out.println(issued_day);
}
//객체를 통해 파싱하는 방법
@GetMapping(path = "/book2")
public void queryParamDto(
@RequestParam String category,
@RequestParam String issuedYear,
@RequestParam(name = "issued-month") String issuedMonth,
@RequestParam String issued_day
){
System.out.println(category);
System.out.println(issuedYear);
System.out.println(issuedMonth);
System.out.println(issued_day);
}
}
✅ POST 방식
: HTTP Body에서 정보를 전달 받을 수 있음.
- RequestBody
package com.example.rest_api.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BookRequest {
private String name;
private String number;
private String category;
}
package com.example.rest_api.controller;
import com.example.rest_api.model.BookRequest;
import com.example.rest_api.model.UserRequest;
import org.apache.catalina.User;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
public class PostApiController {
//Post 방식은 디폴트가 객체이다.
@PostMapping("/post")
public BookRequest post(
//body로 들어오는 객체를 해당 변수에 매핑
@RequestBody BookRequest bookRequest
){
System.out.println(bookRequest);
return bookRequest;
}
//TODO 사용자의 이름, 전화번호, 이메일을 받는 POST Method
@PostMapping("/user")
public void user(
@RequestBody UserRequest userRequest
){
System.out.println(userRequest);
}
}
- json
✔️ 형태
key : value
{
"name" : Spring Boot",
"number" : 100",
"category" : JAVA"
}
✔️ json으로 받을 수 있는 값
String : 문자
Number : 숫자 (소수점, int double, float)
Boolean: true / false
{} : Object
✅ PUT 방식
→ 주로 갱신할 때 많이 사용함
package com.example.rest_api.model;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
//Json 문자 파싱
@JsonNaming(value = PropertyNamingStrategies.SnakeCaseStrategy.class)
public class UserRequest {
private String userName;
private Integer userAge;
private String email;
private Boolean isKorean;
}
package com.example.rest_api.controller;
import com.example.rest_api.model.UserRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j //log
@RestController
@RequestMapping("/api")
public class PutApiController {
@PutMapping("/put")
public void put(
@RequestBody
UserRequest userRequest
){
log.info("Request: {}", userRequest);
}
}
✅ DELETE 방식
댓글