背景:将VO中值为空的字符串字段,设置一个默认值.
如果逐个对字段进行判断, 或者在VO中中get方法判断,都会造成太多重复代码. 故通过工具类进行统一设置达到代码简化优雅.
工具类如下:
import com.gexin.fastjson.JSON;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
public class ClassUtils {
private static Logger logger = LoggerFactory.getLogger(ClassUtils.class);
//空数据暂无
private final static String defaultStringData = "暂无";
/**
* 设置bean中String类型的空字符串字段的默认值"暂无"
* @methodName setStringDefaultValue
* @param bean
* @author admin
* @date 2022/12/12
* @return void
*/
public static <T> T setStringDefaultValue(T bean){
try {
Class<?> type = bean.getClass();
Map<String, Object> returnMap = new HashMap<>();
BeanInfo beanInfo = Introspector.getBeanInfo(type);
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor descriptor : propertyDescriptors) {
String propertyName = descriptor.getName();//字段名
if (!Objects.equals(propertyName,"class")) {
Class<?> propertyType = descriptor.getPropertyType();
String name = propertyType.getName();//字段类型
//字段类型为字符串
if (Objects.equals(name, "java.lang.String")){
Method readMethod = descriptor.getReadMethod();
Object result = readMethod.invoke(bean);//字段值
if (StringUtils.isBlank((String)result)){
Method writeMethod = descriptor.getWriteMethod();
//设置默认值
writeMethod.invoke(bean, defaultStringData);
}
}
}
}
return bean;
} catch (Exception e) {
e.printStackTrace();
}
return bean;
}
public static class TestVO{
@ApiModelProperty("id")
private Long id;
@ApiModelProperty("名称")
private String name;
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
public static void main(String[] args) {
TestVO vo = new TestVO();
vo.setId(1L);
//vo.setName("a");
System.out.println(JSON.toJSONString(vo));
System.out.println("--------------------");
//设置默认值
TestVO newVO = ClassUtils.setStringDefaultValue(vo);
System.out.println(JSON.toJSONString(newVO));
}
}