스프링MVC 사용시 메시지 컨버터를 이용해서 Object <–> JSON 으로 변환한다.
VO ( Value Object) 클래스 생성시 Getter/Setter 를 테이블 컬럼명과 동일하게 사용한다.
예를 들면, 사용자 이름일 경우 테이블 컬럼명은 “USER_NAME”으로 사용한다.
(SI 에서는 보통 관습적으로 테이블 컬럼명과 동일하게 많이 사용한다.)
MappingJackson2HttpMessageConverter를 사용하면 JSON 변환되었을때 키(Key) 값이 Naming 전략에 따라 변경된다.
기본 네이밍 전략은 LOWER_CAMEL_CASE이다.
USER_NAME –> user_NAME으로 변경된다.
대문자로 키(Key) 값이 변경되지 않도록 할려면 아래와 같이 네이밍 전략을 바꾸어야 한다.
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="prefixJson" value="false" /> <property name="prettyPrint" value="true" /> <property name="objectMapper"> <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean" autowire="no"> <property name="propertyNamingStrategy"> <bean class="com.jaegeun.common.bind.UpperCaseUnderscoreStrategy" /> </property> </bean> </property> </bean>
기존 네이밍 전략 중에 com.fasterxml.jackson.databind.PropertyNamingStrategy.SnakeCaseStrategy 클래스가 제공한다.
SnakeCase 이름처럼 user_name이라는 네이밍을 사용할 수 있다.
그러나, 키(Key) 값은 대문자로 사용한다는 요구사항이 있기 때문에 네이밍 전략을 확장해 보기로 한다.
아래와 같이 SnakeCase 전략을 상속 받아서 대문자로 바꾸어 주면 된다.
package com.jaegeun.wfk.common.bind; import com.fasterxml.jackson.databind.PropertyNamingStrategy; @SuppressWarnings("serial") public class UpperCaseUnderscoreStrategy extends PropertyNamingStrategy.SnakeCaseStrategy { @Override public String translate(String input) { String upperCase = super.translate(input); return upperCase.toUpperCase(); } }
jackson-databind 메이븐 의존성을 갖기 때문에 추가해서 사용하세요.
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.7.4</version> </dependency>
다른 네이밍 전략도 있으니 한번 살펴보기 바란다.
SNAKE_CASE
UPPER_CAMEL_CASE
LOWER_CAMEL_CASE
LOWER_CASE
KEBAB_CASE
그럼 저는 이만 ㅋㅋㅋㅋㅋㅋ