[Spring Boot] jsonproperty 사용하기

Posted by 김성철

jsonproperty 사용하기

https://lemontia.tistory.com/905  

사용하게된 이유

화면단의 데이터는 스네이크 케이스로 작성되어 있음  
	ex) user_name  
서버단에서의 VO는 카멜케이스로 작성되어 있음  
	ex) userName  
  
화면단에서 user_name 을 전송했을때 서버단의 VO에서 userName으로 받고자 한다면  
아래와 같이 일일이 매핑해줘야함  
	ex)vo.setUserName(request.getParameter("user_name"));  
  
하나두개야 해줄수 있지만 ..많아질경우에는 하기가 힘들어짐  

[ 사용방법 ]

jackson 라이브러리 추가

※ 스프링부트에는 기본적으로 추가되어 있음  

사용하고자 하는 VO에 @JsonProperty 를 위에 작성하고 그 안에는 화면단에서 넘겨줄 키값을 적으면됨

=================================================================================================================  
  
class VO{  
	@JsonProperty("user_name")  
    private String userName;  
}  
=================================================================================================================  

컨트롤러에 @RequestBody 를 사용하여 해당 VO로 값을 받도록 선언

Post 방식으로 전달받고 @RequestBody 어노테이션으로 VO에 매핑을 해줘야 @JsonProperty 가 정상적으로 작동함  
=================================================================================================================  
@PostMapping("/test")  
public void test(@RequestBody VO vo){  
=================================================================================================================  

VO안에 변수가 많을경우

@JsonProperty("user_name") 로 변수위에 하나씩 작성하는것은 단순반복노동이며, 오타가 발생할 수도 있음  
그럴때 아래의 어노테이션을 클래스명 상단에 선언해주면 변수위에 @JsonProperty("user_name") 를 작성하지 않아도 모든 변수에 적용이 됨  
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)  
  
=================================================================================================================  
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)  
public class VO {  
	private String userName;  
}  
  
=================================================================================================================  

화면으로 값을 전달할떄 null인 값 보내지 않기

@JsonInclude(Include.NON_NULL)  
위의 옵션을 적용해도 되고  
  
아니면 yml 파일에 아래와 같이 기재  
  
Spring :  
	jackson :  
		default-property-inclusion: NON_NULL  

@JsonCreator

https://findmypiece.tistory.com/241  
https://jaime-note.tistory.com/15  
  
Object Mapper 로 json 데이터를 파싱할때  
하위 Map 이나 List 구조에 데이터를 매핑하고 싶으면 @JsonCreator 을 사용하면 된다  
@JsonCreator 어노테이션의 mode 속성은 한 개의 파라미터냐(DELEGATING), 여러 개의 파라미터냐(PROPERTIES)에 따라 선택하거나 자동으로 설정되도록 기본값(DEFAULT)으로 둘 수 있다. 일반적으로 기본값으로 두고 사용해도 무리는 없다.