mirror of
https://gitee.com/dromara/hutool.git
synced 2025-04-05 17:37:59 +08:00
support alias annotation
This commit is contained in:
parent
63e761139b
commit
623d5ef5c9
@ -6,6 +6,9 @@
|
||||
## 5.1.6
|
||||
|
||||
### 新特性
|
||||
* 【core 】 NumberUtil.decimalFormat增加Object对象参数支持
|
||||
* 【core 】 增加ReflectUtil.getFieldValue支持Alias注解
|
||||
|
||||
### Bug修复
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
|
@ -16,5 +16,11 @@ import java.lang.annotation.Target;
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
|
||||
public @interface Alias {
|
||||
|
||||
/**
|
||||
* 别名值,即使用此注解要替换成的别名名称
|
||||
*
|
||||
* @return 别名值
|
||||
*/
|
||||
String value();
|
||||
}
|
||||
|
@ -8,6 +8,7 @@ import java.util.Collection;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import cn.hutool.core.annotation.Alias;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.map.CaseInsensitiveMap;
|
||||
import cn.hutool.core.util.BooleanUtil;
|
||||
@ -321,11 +322,21 @@ public class BeanDesc implements Serializable{
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取字段名
|
||||
* 获取字段名,如果存在{@link Alias}注解,读取注解的值作为名称
|
||||
*
|
||||
* @return 字段名
|
||||
*/
|
||||
public String getFieldName() {
|
||||
return ReflectUtil.getFieldName(this.field);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取字段名称
|
||||
*
|
||||
* @return 字段名
|
||||
* @since 5.1.6
|
||||
*/
|
||||
public String getRawFieldName() {
|
||||
return null == this.field ? null : this.field.getName();
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,21 @@
|
||||
package cn.hutool.core.bean;
|
||||
|
||||
import cn.hutool.core.bean.BeanDesc.PropDesc;
|
||||
import cn.hutool.core.bean.copier.BeanCopier;
|
||||
import cn.hutool.core.bean.copier.CopyOptions;
|
||||
import cn.hutool.core.bean.copier.ValueProvider;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.lang.Editor;
|
||||
import cn.hutool.core.lang.Filter;
|
||||
import cn.hutool.core.map.CaseInsensitiveMap;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.util.ArrayUtil;
|
||||
import cn.hutool.core.util.ClassUtil;
|
||||
import cn.hutool.core.util.ModifierUtil;
|
||||
import cn.hutool.core.util.ReflectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
|
||||
import java.beans.BeanInfo;
|
||||
import java.beans.IntrospectionException;
|
||||
import java.beans.Introspector;
|
||||
@ -14,23 +30,6 @@ import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import cn.hutool.core.bean.BeanDesc.PropDesc;
|
||||
import cn.hutool.core.bean.copier.BeanCopier;
|
||||
import cn.hutool.core.bean.copier.CopyOptions;
|
||||
import cn.hutool.core.bean.copier.ValueProvider;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.lang.Console;
|
||||
import cn.hutool.core.lang.Editor;
|
||||
import cn.hutool.core.lang.Filter;
|
||||
import cn.hutool.core.map.CaseInsensitiveMap;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.util.ArrayUtil;
|
||||
import cn.hutool.core.util.ClassUtil;
|
||||
import cn.hutool.core.util.ModifierUtil;
|
||||
import cn.hutool.core.util.ReflectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
|
||||
/**
|
||||
* Bean工具类
|
||||
*
|
||||
|
@ -1021,6 +1021,29 @@ public class NumberUtil {
|
||||
return new DecimalFormat(pattern).format(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化double<br>
|
||||
* 对 {@link DecimalFormat} 做封装<br>
|
||||
*
|
||||
* @param pattern 格式 格式中主要以 # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置。<br>
|
||||
* <ul>
|
||||
* <li>0 =》 取一位整数</li>
|
||||
* <li>0.00 =》 取一位整数和两位小数</li>
|
||||
* <li>00.000 =》 取两位整数和三位小数</li>
|
||||
* <li># =》 取所有整数部分</li>
|
||||
* <li>#.##% =》 以百分比方式计数,并取两位小数</li>
|
||||
* <li>#.#####E0 =》 显示为科学计数法,并取五位小数</li>
|
||||
* <li>,### =》 每三位以逗号进行分隔,例如:299,792,458</li>
|
||||
* <li>光速大小为每秒,###米 =》 将格式嵌入文本</li>
|
||||
* </ul>
|
||||
* @param value 值,支持BigDecimal、BigInteger、Number等类型
|
||||
* @return 格式化后的值
|
||||
* @since 5.1.6
|
||||
*/
|
||||
public static String decimalFormat(String pattern, Object value) {
|
||||
return new DecimalFormat(pattern).format(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化金额输出,每三位用逗号分隔
|
||||
*
|
||||
|
@ -1,5 +1,6 @@
|
||||
package cn.hutool.core.util;
|
||||
|
||||
import cn.hutool.core.annotation.Alias;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.exceptions.UtilException;
|
||||
@ -116,6 +117,25 @@ public class ReflectUtil {
|
||||
return null != getField(beanClass, name);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取字段名,如果存在{@link Alias}注解,读取注解的值作为名称
|
||||
*
|
||||
* @return 字段名
|
||||
* @since 5.1.6
|
||||
*/
|
||||
public static String getFieldName(Field field) {
|
||||
if (null == field) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final Alias alias = field.getAnnotation(Alias.class);
|
||||
if (null != alias) {
|
||||
return alias.value();
|
||||
}
|
||||
|
||||
return field.getName();
|
||||
}
|
||||
|
||||
/**
|
||||
* 查找指定类中的所有字段(包括非public字段),也包括父类和Object类的字段, 字段不存在则返回<code>null</code>
|
||||
*
|
||||
|
@ -1,12 +1,11 @@
|
||||
package cn.hutool.core.util;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
|
||||
import cn.hutool.core.lang.Console;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* {@link NumberUtil} 单元测试类
|
||||
*
|
||||
|
@ -55,13 +55,13 @@ final class InternalJSONUtil {
|
||||
} else if (value instanceof Boolean) {
|
||||
writer.write(value.toString());
|
||||
} else if (value instanceof JSONString) {
|
||||
Object o;
|
||||
String valueStr;
|
||||
try {
|
||||
o = ((JSONString) value).toJSONString();
|
||||
valueStr = ((JSONString) value).toJSONString();
|
||||
} catch (Exception e) {
|
||||
throw new JSONException(e);
|
||||
}
|
||||
writer.write(o != null ? o.toString() : JSONUtil.quote(value.toString()));
|
||||
writer.write(valueStr != null ? valueStr : JSONUtil.quote(value.toString()));
|
||||
} else {
|
||||
JSONUtil.quote(value.toString(), writer);
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ public class CustomSerializeTest {
|
||||
JSONObject obj = JSONUtil.parseObj(customBean);
|
||||
Assert.assertEquals("testName", obj.getStr("customName"));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void deserializeTest() {
|
||||
JSONUtil.putDeserializer(CustomBean.class, json -> {
|
||||
|
Loading…
Reference in New Issue
Block a user