[Java] vo 변수 필드 camelCase 를 snake_case로 변환하는 방법

Jinbro·2022년 5월 7일
0

Java

목록 보기
2/7

고민

  • camelCase : 프로젝트 vo 필드 개발 표준
  • snake_case : 관계사 오픈 api 요청 parameter 필드
    => vo를 활용하기 위해서는 convertCamelToSnake가 필요하다.

솔루션 : 주체는 Jackson ObjectMapper

  • @JsonProperty : vo 필드 이름에 명시한 문자열 매핑 (우선순위 높음)
import com.fasterxml.jackson.annotation.JsonProperty;
  • @JsonNaming : vo 모든 필드 이름 표기법 매핑 규칙 정의
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;

샘플 vo

@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class SnakeCase {
	@JsonProperty("time_stamp")
	private String timeStamp;

	public String getTimeStamp() {
		return timeStamp;
	}

	public void setTimeStamp(String timeStamp) {
		this.timeStamp = timeStamp;
	}
}

테스트

  1. 변수 선언, 인스턴스 생성
SnakeCase sc; // vo 선언
ObjectMapper om; // Jackson ObjectMapper 선언

@BeforeEach	
	String timeStamp = DateUtil.getTimeStamp();
	sc = new SnakeCase();
	sc.setTimeStamp(timeStamp);
	om = new ObjectMapper();
}
  1. Json String 문자열 변환
@Test
void printConvertedJsonStrTest() throws JsonProcessingException {
	String jsonStr = om.writeValueAsString(sc);
	System.out.println("converted JsonStr : " + jsonStr);
	assertTrue(jsonStr.contains("time_stamp"));
}
[console]
converted JsonStr : {"time_stamp":"20220507120052"}
  1. Map 변환
@Test
void printConvertedMapEntrySetTest() {
	boolean isJsonConvert = false;
	
	Map<String, Object> voMap = om.convertValue(sc, Map.class);
	System.out.println("converted Map : " + voMap);
	
	for (Entry<String, Object> elem : voMap.entrySet()) {
		String key = elem.getKey();
		isJsonConvert = key.equals("time_stamp");
		System.out.println("key : " + key);
		System.out.println("value : " + elem.getValue());
	}
	assertTrue(isJsonConvert);
}
[console]
converted Map : {time_stamp=20220507120950}
key : time_stamp
value : 20220507120950

결론

  1. 관계사 오픈 api 요청 필드를 vo로 관리할 수 있다.
  2. @JsonProperty가 필드 정책 변경에 좀 더 유연하게 대응할 수 있을 것 같다.
  3. 응답 vo 필드 snakeToCamel도 잘 된다.
profile
자기 개발 기록 저장소

0개의 댓글