Apach CommonLang의 ToStringBuilder를 많이 사용한다.
그런데, 꼭 있을것만 같은 MULTI_LINE_JSON_STYLE이 존재하지 않는다.
그래서 Custom Style을 하나 만들어봤다.
내가 만들고 싶은 스타일은.. 기본적으로 JSON_STYLE 과 MULTI_LINE_STYLE을 합치면서, 또한 null 값은 포함하지 않도록 하고 싶었다.
그렇게 완성한 Custom Style은 아래와 같다.
import org.apache.commons.lang3.SystemUtils; import org.apache.commons.lang3.builder.ToStringStyle; /** * @author Jason, Moon * @since 2018-03-15. */ public class CustomToStringStyle extends ToStringStyle { public static final ToStringStyle MULTI_LINE_JSON_STYLE = new CustomToStringStyle(); private CustomToStringStyle() { super(); this.setUseClassName(false); this.setUseIdentityHashCode(false); this.setContentStart("{" + SystemUtils.LINE_SEPARATOR + "\t"); this.setFieldNameValueSeparator(": "); this.setNullText(""); this.setFieldSeparator("," + SystemUtils.LINE_SEPARATOR + "\t"); this.setContentEnd(SystemUtils.LINE_SEPARATOR + "}"); } @Override public void append(StringBuffer buffer, String fieldName, Object value, Boolean fullDetail) { if (value != null) { appendFieldStart(buffer, fieldName); appendInternal(buffer, fieldName, value, isFullDetail(fullDetail)); appendFieldEnd(buffer, fieldName); } } }
사용은 아래와 같이 하면 된다.
@Override public String toString() { return ToStringBuilder.reflectionToString(this, CustomToStringStyle.MULTI_LINE_JSON_STYLE); }
아래와 같이 테스트하면,
/** * @author Jason, Moon * @since 2018-03-15. */ public class ToStringTest { @Test public void main() { FreeBoardDTO freeBoardDTO = new FreeBoardDTO(); freeBoardDTO.setValue1("value1"); freeBoardDTO.setValue2("value2"); freeBoardDTO.setValue3("value3"); freeBoardDTO.setValue4("value4"); freeBoardDTO.setValue5(null); freeBoardDTO.setValue6("value6"); freeBoardDTO.setValue7("value7"); freeBoardDTO.setValue8("value8"); freeBoardDTO.setValue9("value9"); System.out.println("freeBoardDTO.toString() = \n" + freeBoardDTO.toString()); } }
이런 결과가 나온다.
freeBoardDTO.toString() = { value1: value1, value2: value2, value3: value3, value4: value4, value6: value6, value7: value7, value8: value8, value9: value9 }
'Java > Java' 카테고리의 다른 글
Using IntelliJ File Template (0) | 2018.08.13 |
---|---|
IP 주소를 체크하는 정규 표현식. (0) | 2016.10.24 |
Lombok - 롬복 (0) | 2016.02.14 |
클래스의 정적 구성 요소 (0) | 2009.12.14 |
for 문을 이용하여 배열의 항목들을 순서대로 출력하는 프로그램 (0) | 2009.12.10 |