Spring boot

(스프링 부트 입문)PUT 방식에 이해 및 실습

mynote6676 2025. 6. 20. 23:11

학습 목표

1. PUT 방식에 이해 및 실습

2.DTO 만들어 보기

 

PUT 방식은 HTTP  메서드 중 하나로, 리소스를 생성하거나 업데이트할 때 사용됩니다. 주로 RESTful API에서 특정

리소스를 완전히 대체하거나 수정할 때 사용됩니다.

 

주요 특징

 

전체 업데이트:

- PUT 요청은 클라이언트가 서버에 특정 리소스의 전체 데이터를 보내 해당 리소스를 완전히 대체하거나 새로

생성하는 요청이입니다. 즉, 리소스의 일부가 아닌 전체 데이터를 전송하여 갱신합니다.

 

멱등성:

- PUT 요청은 멱등성을 가집니다. 즉, 동일한 요청을 여러 번 보내도 결과가 동일합니다. 예를 들어, 동일한 데이터를

PUT 요청으로 여러 번 보내도 리소스 상태는 변하지 않습니다.

 

리소스 식별:

-PUT 요청은 URL을 통해 업데이트할 리소스를 명확히 식별합니다. 예를 들어 /users/1 URL로 PUT요청을 보내면

, ID 가 1인 사용자를 업데이트하거나, 해당 리소스가 존재하지 않으면 새로 생성합니다. 

{
	"name" : "mike",
	"age" : 30, 
	"car_list" : [
                	{
                        "name" : "M3",
                        "car_number" : "22너 3341"
                    },
                    {
                        "name" :  "R8",
                        "car_number" : "33너 1234"
                    }
                ]
}

 

| DTO 설계

package com.example.demo1.dto;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import lombok.ToString;

import java.util.List;

@Getter
@ToString
public class UserDTO2 {
    private String name;
    private Integer age;
    @JsonProperty("car_list")
    private List<CarDTO> carList;

    // 내부 클래스
    @Getter
    @ToString
    static class CarDTO {
        private String name;
        @JsonProperty("car_number")
        private String carNumber;
    }

}

 

package com.example.demo1.controller;


import com.example.demo1.dto.UserDTO;
import com.example.demo1.dto.UserDTO2;
import org.springframework.web.bind.annotation.*;

@RestController // IoC 대상이 된다.
@RequestMapping("/put")
public class PutApiController {

    /**
     * 주소 설계
     * METHOD - PUT
     * http://localhost:8080/put/demo1
     */

    @PutMapping("/demo1")
    public UserDTO2 put1(@RequestBody UserDTO2 userDTO2) {
        System.out.println(userDTO2.toString());
        // 리턴타입 Object 내려 주고 있다 -->
        // MappingJackson2HttpMessageConverter 객체가 문자열(json) 변환해서 던진다.
        return userDTO2;
    }

}

 

728x90