通常使用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());
}
}
然后就可以使用自定义的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);
}
来源:https://www.cnblogs.com/luohaonan/p/12021805.html
