java#tostring

通常使用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("\");
        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.alibabagroupId>
            <artifactId>fastjsonartifactId>
            <version>1.2.59version>
        dependency>
public String toJson(Object o) {
        return JSON.toJSONStringWithDateFormat(o, "yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteDateUseDateFormat);
    }

 

 

你可能感兴趣的:(java#tostring)