PUT,DELETE API 만들기

Yu Seong Kim·2024년 1월 15일
0

SpringBoot

목록 보기
11/29

  • PUT API는 웹 애플리케이션 서버를 통해 데이터베이스 같은 저장소에 존재하는 리소스 값을 업데이트 하는 데 사용합니다.
  • POST API 와 비교하면 요청을 받아서 실제 데이터베이스에 반영하는 과정 (서비스 로직)에서 차이만 있을 뿐 컨트롤러를 구현하는 방법은 POST API와 매우 비슷합니다.
  • 리소스를 서버에 전달하기 위해 HTTP Body를 활용해야 합니다.

<PutController 클래스 생성>

1. 컨트롤러 클래스에서 공통 URL 설정

@RestController
@RequestMapping("/api/v1/put")
public class PutController {

}

1. @RequestBody를 활용한 PUT 메서드 구현

  • PUT API 는 POST메서드와 같이 HTTP Body에 값을 담아 전달합니다.
  • 서버에서는 이 값을 받기위하여 @RequestBody를 사용합니다.
@RestController
@RequestMapping("/api/v1/put")
public class PutController {

// http://localhost:8080/api/v1/put/member
    @PutMapping("/member")
    public String postMember(@RequestBody Map<String,Object>putData){
        StringBuilder sb = new StringBuilder();
        
        putData.entrySet().forEach(map ->{
            sb.append(map.getKey() + " : " + map.getValue()+"\n");
        });
        return sb.toString();
    }

}
  • 이전 과 동일하게 서버에 어떤 값이 들어올지 모르는 경우에는 Map객체를 활용하여 값을 받을 수 있습니다.
  • 만약 서버에 들어오는 요청값이 정해져 있다면 아래와 같이 DTO 객체를 사용하여 구현합니다.
  	// http://localhost:8080/api/v1/put/member1
    @PutMapping("/member1")
    public String postMemberDto(@RequestBody MemberDto memberDto){
        return memberDto.toString();
    }

    // http://localhost:8080/api/v1/put/member2
    @PutMapping("/member2")
    public String postMemberDto2(@RequestBody MemberDto memberDto){
        return memberDto.toString();
    }
  • DTO객체를 활용하여 두 개의 메서드를 작성하였습니다.
  • 첫 번째 메서드는 리턴 값이 String이고, 두 번째 메서드는 리턴 값이 MemberDto 입니다.
  • 두 메서드가 DTO객체를 반환할 때 어떤 차이가 있는지 확인 해봅시다.

<1번째 메서드 호출 결과>

  • 출력결과를 보면 보낸 요청 그대로 결과값으로 전달된 것을 확인 할 수 있습니다.
  • toString() 메서드를 활용하여 나름대로 형식에 맞게 전달되었지만, 헤더 항목의 content-type은 ‘text-plain’으로 결과값이 일반 문자열로 전달되었음을 확인할 수 있습니다.

<2번째 메서드 호출 결과>

  • 우측의 BODY값은 Talend API가 정렬해 출력한 결과값으로 실제로는 형식만 유지한 채 전달됩니다.
  • 또한 Content-type 항목도 ‘application/json’ 형식으로 전달된 것을 확인할 수 있습니다.
💡 *RestController* 어노테이션이 지정된 클래스는 *@ResponseBody*를 생략할 수 있습니다. *@ResponseBody* 어노테이션은 자동으로 값을 **JSON**과 같은 형식으로 변환해서 전달하는 역할을 수행합니다. → **DTO**는 key값이 존재하지만, **String**은 key 값 존재하지않습니다 → **JSON**형식의 기본 : key, value값이 존재해야한다.

2. @ResponseEntity를 활용한 PUT 메서드 구현

  • HttpEntity는 header와 body로 구성된 HTTP 요청과 응답을 구성하는 역할을 수행합니다.
  • @ResponseEntity 는 HttpEntity를 상속받아 구현한 클래스입니다.
  • @ResponseEntity 는 HttpEntity로부터 HttpHeaders와 Body를가지고 자체적인 HttpStatus를 구현합니다.
@PutMapping("/member3")
    public ResponseEntity<MemberDto> postMemberDto3(@RequestBody MemberDto memberDto){
        return ResponseEntity
							.status(HttpStatus.ACCEPTED)
							.body(memberDto);
    }
  • 리턴 타입을 ResponseEntity로 설정합니다.
  • status에 넣을 수 있는 값은 다양하지만, 이번에는 HttpStatus.ACCEPTED로써 응답코드를 202 가지게 하였습니다.

<호출 결과>

profile
인생을 코딩하는 남자.

0개의 댓글