본문 바로가기
JAVA/Spring

Spring 프레임워크의 @GetMapping, @PostMapping, @PutMapping, @DeleteMapping 에 대해 알아보자

by GangDev 2024. 3. 23.

 

@GetMapping, @PostMapping, @PutMapping, @DeleteMapping 은 각 어노테이션이 컨트롤러 내의 메서드에 적용되며, 주로 URL 경로와 HTTP 메서드를 결합해서 사용된다.
그래서 스프링 프레임워크에서 RESTful 서비스를 구축할 때 사용되는 주요 어노테이션이다.
HTTP 요청 유형(GET, POST, PUT, DELETE)에 따라 메서드를 매핑하는 데 사용된다.


<@GetMapping>

HTTP GET 요청을 특정 메서드에 매핑한다.
@RequestMapping 어노테이션의 특수한 형태로, 'method = RequestMethod.GET'을 기본값으로 가지고 있다.
주로 데이터를 읽거나 검색할 때 사용된다.

@RestController
public class UserController {

    @GetMapping("/users")
    public List<User> getAllUsers() {
        // 사용자 목록을 반환하는 로직
    }
}

<@PostMapping>

GET요청처럼 HTTP POST 요청에 대응한다.
클라이언트에서 서버로 데이터를 전송해서 새로운 리소스를 생성하거나, 서버에 데이터를 제출할 떄 주로 사용된다.
@RequestMapping 어노테이션의 특수한 형태로, 'method = RequestMethod.POST'를 기본값으로 가지고 있다.

@RestController
public class UserController {

    @PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User newUser) {
    User savedUser = userService.save(newUser);
    return ResponseEntity.status(HttpStatus.CREATED).body(savedUser);
}
}

@RequestBody 어노테이션을 사용하여 HTTP 요청의 데이터를 자바 객체로 변환할 수 있다.
스프링은 Jackson 등의 라이브러리를 사용하여 JSON 데이터를 자바 객체로 자동 변환한다.

위 예시에서, 클라이언트에서 보낸 JSON 데이터를 User 객체로 변환한다.

useService의 save 메소드를 사용하여 User를 저장한 후에는 ResponseEntity를 사용하여 상태 코드와 User객체(savedUser)를 응답으로 반환한다.

<@PutMapping>

HTTP PUT 요청에 대응한다.
주로 기존 리소스를 업데이트하거나, 존재하지 않는 경우에 새 리소스를 생성하는데 사용된다.
@RequestMapping 어노테이션의 특수한 형태로, 기본적으로 'method = RequestMethod.PUT'를 가지고 있다.

@RestController
public class UserController {

   @PutMapping("/users/{id}")
public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User updatedUser) {
    User user = userService.updateUser(id, updatedUser);
    return ResponseEntity.ok(user);
}
}

@PathVariable을 사용하여 URL에서 변수를 추출할 수 있고, @RequestBody를 사용해서 HTTP 요청 본문에 있는 데이터를 자바 객체로 변환한다.

위 예시에서, @PathVariable을 사용하여 URL에서 사용자 ID를 추출한다.
@RequestBody를 통해 클라이언트에서 보낸 JSON 데이터를 USER 객체로 변환한다.
userService의 updateUser 메소드를 통해 사용자 정보를 업데이트한 후, 업데이트된 사용자 객체를 응답으로 반환한다.(ResponseEntity.ok(user))

<@DeleteMapping>

HTTP DELETE 요청을 처리한다.
리소스를 삭제하는 데 사용된다.

@RequestMapping 어노테이션의 특수한 형태로, 'method = RequestMethod.DELETE'를 기본값으로 가지고 있다.

@RestController
public class UserController {

    @DeleteMapping("/users/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
    userService.deleteUser(id);
    return ResponseEntity.noContent().build();
}
}

@PathVariable을 사용하여 URL에서 사용자 ID를 추출한다.
해당 사용자를 삭제한 후, HTTP 204 No Content 상태 코드를 반환한다.(nocontent: 본문이 없음을 의미)