먼저 데이터 통신에 사용할 객체 데이터 DTO를 만들자.
package org.example.restapi.restapi.controller.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserInfo{
private String userName,phoneNumber, email;
private Boolean isKorean; //boolean 타입의 is 라는 시리즈는 isKorean의 set메서드가 SetisKorean 이 아닌 setKorean으로 설정된다.
//그렇기 때문에 레퍼런스 타입인 Boolean 타입을 사용해야한다.
}
위와 같이 UserName, phoneNumber, email, isKorean을 변수로 갖고, 모든 변수들은 set메서드를 가진다. (Data 어노테이션 덕분)

이렇게 각 set, get메서드들이 생성되고 이 get메서드들을 사용해 Json 형식으로 들어온 각 {키: 값}들을 가지고 userInfo를 구성한다.
이제 이 DTO객체를 가지고 실제 put기능을 수행하는 코드를 써보자
package org.example.restapi.restapi.controller;
import lombok.extern.slf4j.Slf4j;
import org.example.restapi.restapi.controller.model.UserInfo;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequestMapping("/api")
public class PutApiController {
@PutMapping("/put")
public void put(@RequestBody UserInfo userInfo){
log.info("Request : {}",userInfo);
}
}
위의 코드에서 log.info 메서드를 사용한 이유는 로그메서드를 활용한 출력이 로그에 할당된 버퍼를 사용하기 때문이다.
로그에 이미 할당된 버퍼를 사용함으로써 메모리를 효율적으로 사용할 수 있고, 디버깅 추적이 가능하다는 장점이 있다.