본문 바로가기
개발공부/JAVA Spring

[Spring Boot] HTTP Request 어노테이션 - GetMapping, PostMapping, PutMapping, DeleteMapping

by bzerome240 2023. 2. 18.

API에 사용하는 HTTP 메서드 어노테이션

스프링 4.3 이후로는 @RequestMapping 메서드는 사용하지 않고 아래 어노테이션들을 사용한다.

method 요소를 정의하지 않아도 된다.

  • @GetMapping
  • @PostMapping
  • @PutMapping
  • @DeleteMapping

 

@RestController 어노테이션이 지정된 클래스는 @RequestBody를 생략할 수 있다.

@RequestBody 어노테이션은 자동으로 JSON 형식의 값을 전달한다.

 


 

GET

서버에서 값을 가져올 때 사용하는 API

URL 경로나 파라미터에 변수를 넣어 요청한다.

 

1. @PathVariable을 이용한 GET 메서드 구현

ex) https://test.com/api/v1/get-api/variable1/{variable}

@GetMapping(value = "/variable1/{variable}")
public String getVariable1(@PathVariable String variable) {
    return variable;
}

어노테이션 변수명과 메서드 매개변수의 이름을 동일하게 맞추기 어려울 때는 아래와 같이 사용한다.

@GetMapping(value = "/variable1/{variable}")
public String getVariable1(@PathVariable("variable") String var) {
    return var;
}

 

 

2. @RequestParam을 이용한 GET 메서드 구현

ex) https://test.com/api/v1/get-api/variable1/test?name=value&email=value2

@GetMapping(value = "/variable1")
public String getRequestParam1(
    @RequestParam String name,
    @RequestParam String email) {
    return name + " " + email;
}

쿼리스트링에 어떤 값이 들어올지 모른다면 Map 객체를 활용한다.

ex) 회원가입 시 선택항목에 대해서는 값을 기입하지 않는 경우에 효율적이다.

@GetMapping(value = "/variable1")
public String getRequestParam1(@RequestParam Map<String, String> param) {
    StringBuilder sb = new StringBuilder();
    
    param.entrySet().forEach(map -> {
        sb.append(map.getKey() + ":" + map.getValue();
    });
    
    return sb.toString();
}

 

 

3. DTO를 이용한 GET 메서드 구현

DTO 클래스에 전달할 필드 객체를 선언하고 getter/setter 메서드를 구현한다.

ex) 받아야할 파라미터가 많은 경우 코드의 양을 줄이고 가독성을 높일 수 있다.

@GetMapping(value = "/variable1")
public String getRequestParam1(MemberDto memberDto) {
    return memberDto.toString();
}

 


 

POST

데이터베이스 등에 리소스를 저장할 때 사용되는 API

저장하고자 하는 값을 HTTP body에 담아 서버에 전달한다.

 

1. RequestBody를 이용한 POST 메서드 구현

어떤 값이 들어오게될지 특정하기 어려울 때 Map 객체를 사용한다.

ex) https://test.com/api/v1/post-api/variable1/member

@PostMapping(value = "/member")
public String postMember(@RequestBody Map<String, Object> postData) {
    StringBuilder sb = new StringBuilder();
    
    postData.entrySet().forEach(map -> {
        sb.append(map.getKey() + ":" + map.getValue());
    });
    
    return sb.toString();
}

 

2. DTO를 이용한 POST 메서드 구현

요청 메시지에 들어갈 값이 정해져 있다면 DTO 객체를 매개변수로 작성할 수 있다.

ex) https://test.com/api/v1/post-api/variable1/member

@PostMapping(value = "/member")
public String postMemberDto(@RequestBody MemberDto memberDto) {
    return memberDto.toString();
}

 


 

PUT

데이터베이스 등에 존재하는 리소스값을 업데이트하는 API

 

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

어떤 값이 들어오게될지 특정하기 어려울 때 Map 객체를 사용한다.

ex) https://test.com/api/v1/put-api/variable1/member

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

 

2. DTO를 이용한 PUT 메서드 구현

요청 메시지에 들어갈 값이 정해져 있다면 DTO 객체를 매개변수로 작성할 수 있다.

ex) https://test.com/api/v1/put-api/variable1/member

@PutMapping(value = "/member")
public String postMemberDto(@RequestBody MemberDto memberDto) {
    return memberDto.toString(); // string 형태로 return
}

@PutMapping(value = "/member")
public MemberDto postMemberDto(@RequestBody MemberDto memberDto) {
    return memberDto; // json 형태로 return
}

 

3. ResponseEntity를 이용한 PUT 메서드 구현

  • HttpEntity, RequestEntity, ResponseEntity, HttpStatus
  • HttpStatus.ACCEPTED : 202 응답코드
@PutMapping(value = "/member")
public ResponseEntity<MemberDto> postMemberDto(@RequestBody MemberDto memberDto) {
    return ResponseEntity
      .status(HttpStatus.ACCEPTED)
      .body(nmemberDto)
}

 


 

DELETE

데이터베이스에 있는 리소스를 삭제하는 API

 

1. @PathVariable을 이용한 DELETE 메서드 구현

ex) https://test.com/api/v1/delete-api/variable1/{variable}

@DeletetMapping(value = "/variable1/{variable}")
public String DeleteVariable1(@PathVariable String variable) {
    return variable;
}

 

2. @RequestParam을 이용한 DELETE 메서드 구현

ex) https://test.com/api/v1/delete-api/variable1/test?email=value

@DeletetMapping(value = "/test")
public String getRquestParam1(@RequestParam String email) {
    return email;
}

 

728x90
반응형

댓글