본문 바로가기

Spring Boot/스프링 부트 핵심 가이드

[SpringBoot] 5.3-5 POST, PUT, DELETE API 만들기

Summary :
POST API는 DB에 값을 저장하기 위해, PUT API는 DB에 있는 값을 수정하기 위해 사용함

두 API 모두 Http body에 json을 넣어 값을 전달함
DELETE API는 DB에 있는 값을 삭제하기 위해 사용함
리소스를 식별할 수 있는 간단한 정보만 있어도 되므로 URI로 값을 전달함

🔍 목차 


5.3 POST API 만들기
    5.3.1 @RequestMapping으로 구현하기
    5.3.2 @RequestBody를 활용한 POST 메서드 구현
5.4 PUT API 만들기
    5.4.1 @RequestBody를 활용한 PUT 메서드 구현
    5.4.2 ResponseEntity를 활용한 PUT 메서드 구현
5.5 DELETE API 만들기
    5.5.1 @PathVariable과 @RequestParam을 활용한 DELETE 메서드 구현

 

📌 5.3 POST API 만들기


  • POST API는 데이터베이스에 값을 저장할 때 사용되는 API
  • 저장하고자 하는 값을 HTTP 바디(body)에 담아 서버에 전달함

📌 5.3.1 @RequestMapping으로 구현하기


  • value="URL", method=RequestMethod.POST 와 함께 작성하면 된다.
@RequestMapping(value="/domain", method = RequestMethod.POST)
public String postExample(){
 	return "Hello Post API";
}

 

📌 5.3.2 @RequestBody를 활용한 POST 메서드 구현


  • POST는 값을 HTTP Body에 JSON 형식으로 넣어서 전송함
  • 이렇게 전송된 json 값은 @RequestBody으로 받을 수 있음
  • @RequestBody는 HTTP의 Body 내용을 해당 어노테이션이 지정된 객체에 매핑하는 역할
  • 예를들어, 아래와 같은 json 요청이 왔고
  • { "username": "test1", "password": "1111", }
  • 이를 @RequestBody LoginInfo login 으로 받는다고 하면, 
  • @Data clss LoginInfo{ private String username; private String password; }
  • DTO의 필드와 json의 키가 매핑되어서 json의 값이 담긴 dto 객체를 사용할 수 있게 됨

💡 @ResponseBody를 생략할 수 있는 조건 : @RestController 


  • @RestController 어노테이션이 지정된 클래스는 @ResponseBody를 생략할 수 있음
  • @RestController에 @ResponseBody가 포함되어있기 때문

📌 5.4 PUT API 만들기


  • PUT API는 DB에 존재하는 값을 수정하기 위해 사용함
  • 리소스를 서버에 전달하기 위해 HTTP Body에 값을 넣기 때문에 post api와 방식이 유사함

📌 5.4.1 @RequestBody를 활용한 PUT 메서드 구현


  • PUT API는 값을 HTTP Body에 담아 전달하므로 @RequestBody로 값을 받을 수 있음
  • 아래 코드처럼 여러 json 객체를 Map<String, Object>로 받을 수도 있음
@PutMapping(value = "/member")
public String post Member(@RequestBody Map<String, Object> putData) {
	StringBuilder sb = new StringBuilder();
	
	putData.entrySet().forEach ( e -> {
		sb.append(e.getKey() +
	});

	return sb.toString();
}
  • 아래 코드처럼 DTO로 받을 수도 있음
  • 이때 DTO로 리턴을 하는데, @RestController가 선언되어있다면 json 형태로, 그렇지 않으면 String 타입으로 반환됨
@PutMapping(value="/member2")
public MemberDto postMemberDto2 (@RequestBody MemberDto memberDto) {
	return memberDto;
}

 

📌 5.4.2 ResponseEntity를 활용한 PUT 메서드 구현


  • RequestEntity와 ResponseEntity는 HttpEntity를 상속받아 구현한 클래스
  • 그중 ResponseEntity는 응답 데이터를 구성해서 전달하는 역할
  • 특히 Header와 Status를 다룰 수 있으므로 헤더와 상태를 직접 설정하는 경우 사용함 (Body는 기본)
  • 아래 코드는 빌더 패턴을 이용해서 ResponseEntity를 구성하고, 리턴하는 코드
 @PutMapping(value = "/member3")
 public ResponseEntity<MemberDto> postMemberDto3(@RequestBody MemberDto memberDto) {
	return ResponseEntity
    	.status(HttpStatus.ACCEPTED) // 202
		.body (memberDto);
 }

 

📌 5.5 DELETE API 만들기


  • DB에 있는 값을 삭제할 때 사용하는 API
  • 리소스를 식별할 수 있는 값을 받아서 DB에 존재하는지 확인 후, 있으면 삭제하는 역할을 수행
  • 리소스를 식별할 수 있는 간단한 값만 넘겨받으면 되므로 & 무엇을 삭제하는지 명시적으로 하게 위해
    GET 방식과 같이 URI에 값을 넣어 요청을 함

 

📌 5.5.1 @PathVariable과 @RequestParam을 활용한 DELETE 메서드 구현


@PathVariable을 이용하면 URI에 포함된 값을 받아 로직을 처리할 수 있음

 @DeleteMapping(value = "/{variable}")
 public String DeleteVariable(@PathVariable String variable) {
 	return variable;
 }

 

@RequestParam을 이용하면 ? 이후의 쿼리스트링 값도 받을 수 있음

 @DeleteMapping (value = "/request1")
 public String getRequestParam1 (@RequestParam String email) {
	return "e-mail : + email;
 }