티스토리 뷰

DB 필드명에 prefix 한글자가 들어가는 경우 json 리턴 시 예상과는 다른 결과가 나왔다.

지금 사용하는 솔루션에서는 r_(readonly), i_(internal) 등의 prefix를 DB에서 사용하고 있다.


이 경우 문제가 발생하는데 예를 들면 r_object_id와 같은 필드를 myBatis로 rObjectId 필드로 매핑하고 있다. 당연히 {"rObjectId": "~~~"} 와 같이 나올줄 알았는데 결과는 {"robjectId": "~~~"} 와 같이 나오는 것이었다. 구글링을 해보니 jackson에서 이렇게 처리하고 있다고 하더라.


해결책은 spring boot 기준 application.yml 에서 

spring:
  jackson:
    property-naming-strategy: com.cusonar.CustomNamingStrategy
    mapper:
      use-std-bean-naming: true

use-std-bean-naming을 true로 하면 standard한 bean naming으로 한다는 부분인데 upperCamelCase로 된다.

하지만 난 lowerCamelCase를 사용하고 싶기 때문에 property-naming-strategy에서 일부 수정을 해준다.

Guava 라이브러리 추가 후 CustomNamingStrategy.java 를 생성해주면 된다.

package com.cusonar;

import com.fasterxml.jackson.databind.PropertyNamingStrategy.PropertyNamingStrategyBase;
import com.google.common.base.CaseFormat;

public class CustomNamingStrategy extends PropertyNamingStrategyBase {
	/**
	 * 
	 */
	private static final long serialVersionUID = -6456981617015946114L;

	@Override
	public String translate(String propertyName) {
		String result = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, propertyName);
		return result;
	}
}

Guava 사용법은 https://github.com/google/guava/wiki/StringsExplained


'Java > Tips' 카테고리의 다른 글

Test Static Library Import 빠르게 하기  (0) 2016.06.08
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함