前言:
表单查询中, 后端返回数据参差不齐,有时候会出现该字段没有值的情况,为了前端界面友好展示,需要对没有值的字段进行相应值的替换,比如替换为:【-】
兼容有些字段不需要进行替换的方法
以下就是对实体类进行替换的方法
java类方法
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Field;
import java.util.Objects;
/**
* 类描述:Ui格式统一工具类
* @author 技匠
* @date 2023-03-29 10:33:05
*/
public class UiFormatUtil {
public static final String DEFAULT_STR_VALUE = "-";
public static final Integer DEFAULT_INTEGER_VALUE = 0;
public static final Double DEFAULT_DOUBLE_VALUE = 0D;
public static final Long DEFAULT_LONG_VALUE = 0L;
/**
* 方法描述:格式化UI类
* @param bean 格式化对象
* @date 2023-03-29 10:34:27
*/
public static <T> T format(T bean) {
if (bean == null) {
return null;
}
try {
T val = (T) formatBase(bean.getClass(), bean, DEFAULT_STR_VALUE);
if (val != null) {
return val;
}
// 获取对象的类
Class<?> cls = bean.getClass();
for (Field field : cls.getDeclaredFields()) {
transField(bean, field);
}
return bean;
} catch (Exception ignore) {
}
return null;
}
/**
* 方法描述:检测基本类型转换
* @param bean 基本类型值
* @return {@link T} 返回转化后的值
* @date 2023-03-29 10:38:52
*/
private static <T> void transField(T bean, Field field) {
try {
// 设置属性可以访问
field.setAccessible(true);
// 默认值
String defaultValue = DEFAULT_STR_VALUE;
// 获取字段注解
UiFormat format = field.getAnnotation(UiFormat.class);
if (format != null) {
if (format.ignore()) {
return;
}
defaultValue = format.defaultValue();
}
// 获取属性值
Object value = field.get(bean);
// 获取属性类型
Class<?> type = field.getType();
value = formatBase(type, value, defaultValue);
if (value != null) {
field.set(bean, value);
}
} catch (Exception ignored) {
} finally {
// 设置属性不可以访问
field.setAccessible(false);
}
}
/**
* 方法描述:检测基本类型转换
* @param value 基本类型值
* @return {@link Object} 返回转化后的值
* @date 2023-03-29 10:38:52
*/
private static Object formatBase(Class cls, Object value, String defaultValue) {
// 根据属性类型进行处理
if (hasCls(cls, String.class)) {
if (StringUtils.isBlank((String) value)) {
return defaultValue;
}
return value;
} else if (hasCls(cls, Long.class)) {
if (value == null) {
if (Objects.equals(defaultValue, DEFAULT_STR_VALUE)) {
return DEFAULT_LONG_VALUE;
}
return Long.valueOf(defaultValue.trim());
}
return value;
} else if (hasCls(cls, Integer.class)) {
if (value == null) {
if (Objects.equals(defaultValue, DEFAULT_STR_VALUE)) {
return DEFAULT_INTEGER_VALUE;
}
return Integer.valueOf(defaultValue.trim());
}
return value;
} else if (hasCls(cls, Double.class)) {
if (value == null) {
if (Objects.equals(defaultValue, DEFAULT_STR_VALUE)) {
return DEFAULT_DOUBLE_VALUE;
}
return Double.valueOf(defaultValue.trim());
}
return value;
}
return null;
}
private static Boolean hasCls(Class baseCls, Class... cls) {
if (baseCls == null) {
return false;
}
for (Class cl : cls) {
if (cl != null && Objects.equals(cl.getTypeName(), baseCls.getTypeName())) {
return true;
}
}
return false;
}
}
字段注解(有些字段不需要替换,或者提换为其他类型的值)
package part.common.utils.uiFormat;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 类描述:Ui格式统一工具类
* @author 技匠
* @date 2023-03-29 10:33:05
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface UiFormat {
/*
* 忽略该字段
*/
boolean ignore() default true;
/*
* 字段默认值
*/
String defaultValue() default "-";
}