데이터 갱신과 생성에 해당하는 PUT 요청을 알아본다.
PUT 메소드는 POST 메소드와 매우 흡사하나,
데이터가 존재하면, 갱신하는 기능을 한다. CRUD의 C,U를 다룰 수 있는 메소드이다.
단, 실행될 때마다 데이터가 변경되기 때문에 안정성은 지켜지지 않으나, 중복 데이터를 생성하는 것이 아니므로 멱등성은 지켜진다. 예제는 매우 간단하다.
@RestController
@RequestMapping("/api")
public class PutApiController {
@PutMapping("/put")
public UserRequest put(
@RequestBody
UserRequest userRequest
){
log.info("Request : {}", userRequest);
return userRequest;
}
}
POST 메소드와 비슷한 것이 아니라, 어노테이션만 다를 뿐이다. 매우 유사하다.
한 가지 다른 것을 다룬다면
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonNaming(value = PropertyNamingStrategies.SnakeCaseStrategy.class)
public class UserRequest {
private String userName;
private Integer userAge;
private String email;
private boolean isKorean;
}
isKorean 변수는 boolean 타입이고 디폴트는 false이다.
하지만 위와같이 구성한다면 요청은 디폴트로만 나온다.

왜일까 ?
바로 boolean타입의 getter 메소드 생성방식에 차이가 있다.
@Data 어노테이션을 통해 만들어진 함수들을 보면

getKorean이라는 함수가 있는데, 우리가 선언한 변수는 isKorean이므로 getIsKorean이라는 함수가 만들어질 것으로 예상할 수 있다.
하지만 primitive type인 boolean은 getter 메소드를 만들 때 getKorean이라는 이름으로 생성하므로, json 요청의 key를 바꾸거나 reference type인 Boolean으로 변수 타입을 변경하는 것이 옳다.
json은 바꾸지 말자. 사용자 혹은 본인까지 혼동될 수 있다.