본문 바로가기
스프링

스프링 1-5. PUT API

by 호놀롤루 2022. 3. 15.

1. 개요

Put의 특징은

  • 리소스 갱신, 생성용
  • CRUD의 C, U
  • 멱등하다. (없으면 만들고, 있으면 같은 걸 갱신하니 멱등하다)
  • 안정성 X (갱신되니)
  • Path Variable 사용한다.
  • Query Parameter 쓰긴 하는데 잘 안쓴다.
  • DataBody 주로 쓴다.

이번에 만들어 볼 건 유저의 이름, 나이, 자동차를 관리하는 API다.

 

2. 사용법

2-1. Json 형태

Json 형태

{

                    “name” : “”,

                    “age” : ,

                    “car_list” : [

                    {

                    “name” : “”,

                    “car_number” : 

},

{

                    “name” : “”,

                    “car_number” : 

},

]

}

 

차가 여러 대일 수도 있으니 차는 배열로

{

                    “name” : “steve”,

                    “age” : 39,

                    “car_list” : [

                    {

                    “name” : “BMW”,

                    “car_number” : “51 1234”

},

{

                    “name” : “A5”,

                    “car_number” : “341 5123”

}

]

}

 

2-2. DTO

우선 유저 정보에 자동차를 배열로 넣어야 하니 자동차 객체를 만든다.

 

package com.example.put.dto;

public class CarDto {
    public void setCarNumber(String carNumber) {
        this.carNumber = carNumber;
    }

    private String name;
    private String carNumber;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "CarDto{" +
                "name='" + name + '\'' +
                ", carNumber=" + carNumber +
                '}';
    }
}

이 객체를 배열로 사용하는 DTO를 만든다.

 

 

package com.example.put.dto;

import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;

import java.util.List;

@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class PutRequestDto {

    private String name;
    private int age;

    public List<CarDto> getCarList() {
        return carList;
    }

    public void setCarList(List<CarDto> carList) {
        this.carList = carList;
    }

    private List<CarDto> carList;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "PutRequestDto{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", carList=" + carList +
                '}';
    }
}

 

@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)

우선 이 부분은 이 클래스 내에서 카멜 케이스로 변수를 적었지만, 스네이크 케이스로 들어오는 모든 데이터를

처리하겠다는 뜻이다.

@JsonProperty()의 경우, 변수 하나만 조정하지만 이건 클래스를 조정한다.

 

우선 유저의 나이와 이름, 자동차를 받는 배열 이 3개가 멤버 변수다.

Getter, Setter 만들어주고 toString()도 만들어 놓는다.

 

2-3. PUT API

@RestController
@RequestMapping("/api")
public class PutApiController {

    @PutMapping("/put/{userId}")
    public void put(@RequestBody PutRequestDto request, @PathVariable(name = "userId") Long id) {
        System.out.println(id);
        return request;
    }

}

데이터 처리는 Path Variable로 특정한 유저의 정보를 건드릴 수 있다.

RequestBody에는 dto객체인 request가 들어가고, Path Variable로 들어온 변수를 처리해 줄 long id를 매개변수로 받는다.

id를 출력하고, request에 들어간 내용이 출력된다.

아직 DB에 연결을 안해서 유저가 없지만 유저를 추가하면 이런 식으로 접근한다.

 

2-4. 어노테이션

마지막으로 어노테이션을 다시 정리하자면

@RestController : Rest API 설정

@RequestMapping : 리소스를 설정 (method로 구분 가능)

 

@PutMapping : Put Resource 설정

@RequestBody : Request Body 부분 parsing

@PathVariable : URL Path Variable Parsing

'스프링' 카테고리의 다른 글

스프링 1-7. Response  (0) 2022.03.15
스프링 1-6. DELETE API  (0) 2022.03.15
스프링 1-4. POST API  (0) 2022.03.15
스프링 1-3. GET API  (0) 2022.03.15
스프링 1-2. REST Client 시작  (0) 2022.03.15

댓글