카테고리 없음

[Spring] @JsonProperty, @JsonNaming 왜 사용할까?

lvolzoo 2024. 5. 13. 09:01
반응형

1. Jackson 라이브러리란

  • REST API 방식으로 서버와 클라이언트가 통신할 때, JSON 형식을 주로 사용함.
  • 그런데 서버단에서는 Camel Case 방식을, 클라이언트단에서는 Snake Case 방식을 사용함.
  • 따라서 서버단과 클라이언트단의 표현 방식이 다르기 때문에, 데이터의 key가 달라지는 경우 존재.
  • 이러한 문제를 해결하기 위해 해당 라이브러리의 어노테이션 사용.
    -> @JsonProperty, @JsonNaming

 

2. @JsonProperty, @JsonNaming

  • Java 객체의 필드와 JSON 객체 속성 간의 매핑 정의.
    Java 필드명과 JSON 속성명이 다를 경우에도 서로 연결 가능.

 

json으로 넘어오는 값이 아래와 같다고 가정하자.

{
    “name” : “상품명”,
    “price” : 가격,
    “description” : “상품 설명”,
    "categoryId" : 카테고리 id
}

 

 

자바 Entity는 다음과 같다.

public class Product {
	private String name;
	private int price;
	private String description;
	private int categoryId;
}

 

 

Controller는 다음과 같다.

@RestController
public class ProductController {
	@PostMapping("/products")
	public void save(@RequestBody String productName) {
        productService.save(productName);
    }
}

 

 

@JsonProperty를 사용해서 key를 제대로 매핑시켜주자 !!!

@Data
public class Product {
	private String name;
	private int price;
	private String description;
	
	@JsonProperty("category_id")
	private int categoryId;
}

이렇게 필드마다 각각 위에 @JsonProperty를 붙여주면 되는데,

만약 필드가 많아지면 코드가 엄청 엄청 길어지겠지 ㅠㅠ

→ 그럴 때 사용하는 것이 @JsonNaming 이다!!

 

 

@JsonNaming

@Data
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class Product {
	private String name;
	private int price;
	private String description;
	private int categoryId;
}

이렇게 아예 class 위에 어노테이션 붙여주면 매핑이 제대로 되는 것을 확인할 수 있다 ~

반응형