java#tostring

こ雲淡風輕ζ 提交于 2019-12-11 12:48:38

通常使用apache-commons 来生成tostring方法,但是对于类型为java.util.Date的字段打印效果并不是我们想要的。

@Override
    public String toString() {
         return ReflectionToStringBuilder.toString(this, ToStringStyle.JSON_STYLE);
    }

 

可以自定义style,来解决这个问题,自定义style需要继承org.apache.commons.lang3.builder.ToStringStyle,例如:

mport org.apache.commons.lang3.SystemUtils;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;



public class MyJsonStyle extends ToStringStyle {

    private final static ToStringStyle instance = new MyJsonStyle();

    protected void appendDetail(StringBuffer buffer, String fieldName, Object value) {

        if (value instanceof Date) {
            value = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(value);
        }

        if (!value.getClass().getName().startsWith("java")) {
            buffer.append("\"" + ReflectionToStringBuilder.toString(value, instance) + "\"");
        } else {
            super.appendDetail(buffer, "\"" + fieldName + "\"", "\"" + value + "\"");
        }
    }

    //使用父类中的方法做一些设置
    public MyJsonStyle() {
        setArrayContentDetail(true);
        setUseShortClassName(true);

        this.setUseClassName(false);
        this.setUseIdentityHashCode(false);

        this.setContentStart("{");
        this.setContentEnd("}\n");

        this.setArrayStart("[");
        this.setArrayEnd("]");

        this.setFieldSeparator(", " + SystemUtils.LINE_SEPARATOR + "  ");
        this.setFieldNameValueSeparator(":");

        this.setNullText("null");

        this.setSummaryObjectStartText("\"<");
        this.setSummaryObjectEndText(">\"");

        this.setSizeStartText("\"<size=");
        this.setSizeEndText(">\"");
    }

    public static ToStringStyle getInstance() {
        return instance;
    }


    @Override
    public void appendDetail(StringBuffer buffer, String fieldName, Collection value) {
        appendDetail(buffer, fieldName, value.toArray());
    }
}
View Code

 

然后就可以使用自定义的style来生成toString方法了

@Override
    public String toString() {
        return ReflectionToStringBuilder.toString(this, new MyJsonStyle());
    }

 

————————————————————————————————————————————————————————————————————————————————————————————————————————————————

 

另外,可以使用Alibaba的fastjson完成对象输出时候格式化时间

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.59</version>
        </dependency>
public String toJson(Object o) {
        return JSON.toJSONStringWithDateFormat(o, "yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteDateUseDateFormat);
    }

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!