java Ui格式统一工具类,前端界面返回数据统一格式化工具【返回字段不为空展示】

21 篇文章 1 订阅
11 篇文章 0 订阅

前言:

表单查询中, 后端返回数据参差不齐,有时候会出现该字段没有值的情况,为了前端界面友好展示,需要对没有值的字段进行相应值的替换,比如替换为:【-】

兼容有些字段不需要进行替换的方法
以下就是对实体类进行替换的方法

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 "-";
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值