본문 바로가기

Java/Java

ToStringStyle.MULTI_LINE_JSON_STYLE

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
}