mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
修复JWT自定义时间格式后的时间戳转换问题
This commit is contained in:
@@ -38,6 +38,7 @@ import cn.hutool.core.lang.Opt;
|
||||
import cn.hutool.core.lang.TypeReference;
|
||||
import cn.hutool.core.map.SafeConcurrentHashMap;
|
||||
import cn.hutool.core.util.ClassUtil;
|
||||
import cn.hutool.core.util.ObjUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.ReflectUtil;
|
||||
import cn.hutool.core.util.ServiceLoaderUtil;
|
||||
@@ -255,6 +256,11 @@ public class ConverterRegistry implements Serializable {
|
||||
type = ((TypeReference<?>) type).getType();
|
||||
}
|
||||
|
||||
// 自定义对象转换
|
||||
if(value instanceof TypeConverter){
|
||||
return ObjUtil.defaultIfNull((T) ((TypeConverter) value).convert(type, value), defaultValue);
|
||||
}
|
||||
|
||||
// 标准转换器
|
||||
final Converter<T> converter = getConverter(type, isCustomFirst);
|
||||
if (null != converter) {
|
||||
|
@@ -0,0 +1,72 @@
|
||||
package cn.hutool.core.convert;
|
||||
|
||||
import cn.hutool.core.convert.impl.DateConverter;
|
||||
import cn.hutool.core.convert.impl.TemporalAccessorConverter;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.time.temporal.TemporalAccessor;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 包含格式的数字转换器,主要针对带格式的时间戳
|
||||
*
|
||||
* @author looly
|
||||
* @since 5.8.13
|
||||
*/
|
||||
public class NumberWithFormat extends Number implements TypeConverter{
|
||||
|
||||
private final Number number;
|
||||
private final String format;
|
||||
|
||||
/**
|
||||
* 构造
|
||||
* @param number 数字
|
||||
* @param format 格式
|
||||
*/
|
||||
public NumberWithFormat(final Number number, final String format) {
|
||||
this.number = number;
|
||||
this.format = format;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public Object convert(Type targetType, Object value) {
|
||||
if (targetType instanceof Class) {
|
||||
final Class<?> clazz = (Class<?>) targetType;
|
||||
// https://gitee.com/dromara/hutool/issues/I6IS5B
|
||||
if (Date.class.isAssignableFrom(clazz)) {
|
||||
return new DateConverter((Class<? extends Date>) clazz, format).convert(this.number, null);
|
||||
} else if (TemporalAccessor.class.isAssignableFrom(clazz)) {
|
||||
return new TemporalAccessorConverter(clazz, format).convert(this.number, null);
|
||||
} else if(String.class == clazz){
|
||||
return toString();
|
||||
}
|
||||
}
|
||||
throw new ConvertException("Unsupported target type {}", targetType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int intValue() {
|
||||
return this.number.intValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long longValue() {
|
||||
return this.number.longValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public float floatValue() {
|
||||
return this.number.floatValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public double doubleValue() {
|
||||
return this.number.doubleValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return this.number.toString();
|
||||
}
|
||||
}
|
@@ -101,10 +101,8 @@ public class TemporalAccessorConverter extends AbstractConverter<TemporalAccesso
|
||||
|
||||
@Override
|
||||
protected TemporalAccessor convertInternal(Object value) {
|
||||
if (value instanceof Long) {
|
||||
return parseFromLong((Long) value);
|
||||
} else if (value instanceof Integer) {
|
||||
return parseFromLong((long) (Integer) value);
|
||||
if (value instanceof Number) {
|
||||
return parseFromLong(((Number) value).longValue());
|
||||
} else if (value instanceof TemporalAccessor) {
|
||||
return parseFromTemporalAccessor((TemporalAccessor) value);
|
||||
} else if (value instanceof Date) {
|
||||
|
Reference in New Issue
Block a user