제목에 적혀있는 두 에노테이션은 정확히
'언제 사용하고 어떤 기능을 하는 걸까?'에 대해서 정리한 글.
@Getter
@Setter
public class UserRequest {
private String name;
private int age;
private String phoneNumber;
@RequestMapping("/api")
@RestController
public class UserController {
@PostMapping("/user/object")
public void postMapping(@RequestBody UserRequest userRequest) {
System.out.println(userRequest);
}
}


phoneNumber (카멜 케이스)로 정의되어 있지만 JSON으로 phone_number (스네이크 케이스)로 작성 되어있을 경우 서로 매핑이 안돼서 null이라고 뜸.@JsonProperty 에노테이션.@Getter
@Setter
public class UserRequest {
private String name;
private int age;
@JsonProperty("phone_number")
private String phoneNumber;
@RequestMapping("/api")
@RestController
public class UserController {
@PostMapping("/user/object")
public UserRequest postMapping(@RequestBody UserRequest userRequest) {
System.out.println(userRequest);
return userRequest;
}
}


@JsonProperty("phone_number")를 해당 필드위에 작성해줌으로써 문제 해결.@JsonProperty가 필드 단위였다면 @JsonNaming에노테이션은 클래스 단위.
PropertyNamingStrategy은 deprecated돼서 PropertyNamingStrategies을 사용해야함.


@Getter
@Setter
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public class UserRequest {
private String userName;
private int age;
private String phoneNumber;
@RequestMapping("/api")
@RestController
public class UserController {
@PostMapping("/user/object")
public UserRequest postMapping(@RequestBody UserRequest userRequest) {
System.out.println(userRequest);
return userRequest;
}
}


@JsonNaming에노테이션이 없을 경우.
