最近写的一个工具类, 用来生成mock的javabean对象, 比如将一条模拟数据直接生成javabean的setter代码
public class MockBuilder extends ToStringBuilder {
private String objectName;
/** 是否包含日期时间字段 */
private boolean includeDateField = false;
public MockBuilder(Object object, String objectName) {
super(object, ToStringStyle.MULTI_LINE_STYLE, null);
this.setObjectName(objectName);
}
public MockBuilder(Object object, String objectName,
boolean includeDateField) {
this(object, objectName);
this.includeDateField = includeDateField;
}
public static String toString(Object object, String objectName) {
return toString(object, objectName, false);
}
public static String toString(Object object, String objectName,
boolean includeDate) {
return new MockBuilder(object, objectName, includeDate).toString();
}
public static void sysPrint(Object object, String objectName) {
sysPrint(object, objectName, false);
}
/**
* @param object
* @param objectName
* @param includeDate 是否包含日期时间字段
*/
public static void sysPrint(Object object, String objectName,
boolean includeDate) {
System.out.println(toString(object, objectName, includeDate));
}
@SuppressWarnings("unchecked")
public String toString() {
if (this.getObject() == null) {
return "<null>";
}
getStringBuffer().delete(0, getStringBuffer().length());
Class clazz = this.getObject().getClass();
this.appendWriteMethods(clazz);
return this.getStringBuffer().toString();
}
public void setObjectName(String objectName) {
this.objectName = objectName;
}
public String getObjectName() {
return objectName;
}
@SuppressWarnings("unchecked")
protected void appendWriteMethods(Class clazz) {
try {
BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
PropertyDescriptor[] descriptors = beanInfo
.getPropertyDescriptors();
for (PropertyDescriptor descriptor : descriptors) {
Method writeMethod = descriptor.getWriteMethod();
if (writeMethod == null)
continue;
Method readMethod = descriptor.getReadMethod();
if (readMethod == null) {
continue;
}
String setterName = writeMethod.getName();
Object value = readMethod.invoke(getObject(), new Object[] {});
if (value == null) {
continue;
}
if (value instanceof Number) {
if (((Number) value).doubleValue() == 0) {
continue;
}
}
if (value instanceof Date) {
if (includeDateField) {
value = "new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\").parse(\""
+ new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")
.format(value) + "\")";
} else {
continue;
}
} else if (value instanceof String) {
if (value.equals("")) {
continue;
}
value = "\"" + value + "\"";
}
if (value instanceof List) {
continue;
}
this.getStringBuffer().append(objectName).append(".").append(
setterName).append("(").append(value).append(");\n");
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) {
SpuDO spu = new SpuDO();
spu.setName("The Body Shop橙花茉莉香水");
System.out.println(toString(spu, "spuMock"));
;
}
}