通常使用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()); } }
然后就可以使用自定义的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); }