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 |
댓글