1️⃣ GET Method
- 리소스를 가져오는 것을 뜻한다
- CRUD의 R(READ)
- 호출할 때마다 같은 값을 얻을 수 있다 (멱등성)
- 호출 전후, 서버 내 데이터 상태는 같다 (안정성)
- Path Variable을 가질 수 있음.
- Query Parameter를 사용한다
- DataBody는 사용할 수 없다.
기본 사용법
@GetMapping(path = "/hello")
public String getHello() {
return "get Hello";
}
@RequestMapping(method = RequestMethod.GET, path = "/hi")
public String getHi() {
return "hi";
}
Path Variable 사용
@GetMapping("/path-variable/{name}")
public String pathVariable(@PathVariable(name = "name") String pathName) {
System.out.println("PathVariable : " + pathName);
return name;
}
Query Parameter 사용
http://localhost:9090/api/get/query-param?user=ltk3934&email=ltk3934@daum.net&age=30
? 이후 부분이 Query Parameter입니다. <Key, Value> 형태의 데이터입니다.
Map<String, String>형태로 입력
@GetMapping(path = "query-param1")
public String queryParam(@RequestParam Map<String, String> queryParam) {
StringBuilder sb = new StringBuilder();
queryParam.entrySet().forEach(entry -> {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
System.out.println("\n");
sb.append(entry.getKey() + " = " + entry.getValue() + "\n");
});
return sb.toString();
}
변수 각각 매칭하기
Query Parameter의 Key 이름을 알고 있을 때 사용할 수 있는 방법
@GetMapping("query-param2")
public String queryParam02(
@RequestParam String name,
@RequestParam String email,
@RequestParam int age
) {
System.out.println(name);
System.out.println(email);
System.out.println(age);
return name + " " + email + " " + age;
}
DTO에 매칭하기 (추천 방법)
미리 만들어 둔 DTO에 Query Parameter를 매칭시켜줍니다.
@RequestParam 애너테이션을 사용하지 않아도 됩니다. ( ObjectMapper가 자동으로 매칭시켜준다 )
// 변수와 이름을 spring boot가 매칭을 해준다
@GetMapping("query-param03")
public String queryParam03(UserRequest userRequest) {
System.out.println(userRequest.getName());
System.out.println(userRequest.getEmail());
System.out.println(userRequest.getAge());
return userRequest.toString();
}
2️⃣ POST Method
- 리소스를 생성, 추가한다.
- CRUD의 C(Create)
- 멱등성 X
- 안정성 X
- Path Variable을 가질 수 있음.
- Query Parameter를 사용할 수 있긴하지만 보통 사용하지 않는다
- DataBody를 사용한다
기본 사용법
@PostMapping("/post")
public void post(@RequestBody Map<String, Object> requestData) {
requestData.forEach((key, value) -> {
System.out.println("key : " + key);
System.out.println("value : " + value);
});
}
DTO에 매칭
미리 만들어둔 DTO에 매칭해서 입력 받음.
@PostMapping("/post")
public void post(@RequestBody PostRequestDto requestData) {
System.out.println(requestData);
}
DTO에 매칭시킬 때, 입력 받은 Json 데이터와 DTO의 속성의 이름을 맞춰주어야 합니다.
public class PostRequestDto {
private String account;
private String email;
private String address;
private String password;
@JsonProperty("phone_number") // 여기에 설정된 이름으로 json이 들어오면 여기로 매핑해준다
private String phoneNumber;
@JsonProperty("OTP") // 이걸 카멜 케이스나 스네이크 케이스가 아닌 걸 그냥 보내면 인식을 못하네... 저걸 붙여줘야 됨
private String OTP;
}
Path Variable 사용법은 Get방식과 동일합니다.
3️⃣ PUT Method
- 리소스를 갱신, 생성
- CRUD의 U(Update)
- 멱등성 O
- 안정성 X
- Path Variable을 가질 수 있음.
- Query Parameter를 사용 수 있지만 보통 사용하지 않는다
- DataBody를 사용한다
기본 사용법
@PutMapping("/put")
public PutRequestDto put(@RequestBody PutRequestDto requestDto) {
System.out.println(requestDto);
return requestDto;
}
PathVariable과 DTO 함께 사용
@PutMapping("/put/{userId}")
public void putPathVariable(@RequestBody PutRequestDto requestDto,
@PathVariable Long userId) {
System.out.println(requestDto);
System.out.println(userId);
}
4️⃣ DELETE Method
- 리소스를 삭제
- CRUD의 D(Delete)
- 멱등성 O
- 안정성 X
- Path Variable을 가질 수 있음.
- Query Parameter를 사용한다
- DataBody를 사용하지 않는다.
기본 사용법
@DeleteMapping("/delete/{userId}")
public void delete(@PathVariable String userId, @RequestParam String account) {
System.out.println(userId);
System.out.println(account);
}
5️⃣ Response 만들기
Text로 응답하기
//TEXT
@GetMapping("/text")
public String text(@RequestParam String account) {
return account;
}
Json으로 응답하기
Object mapper가 Json을 Object로, Object를 Json으로 변환시켜 준다.
//JSON
@PostMapping("/json")
public User json(@RequestBody User user) {
return user;
}
ResponseEntity로 응답하기
//ResponseEntity
@PutMapping("/put1")
public ResponseEntity<User> put(@RequestBody User user) {
return ResponseEntity.status(HttpStatus.CREATED).body(user);
}
Uploaded by Notion2Tistory v1.1.0