通用转换,可以直接拿来用
import com.alibaba.fastjson.JSON;import lombok.experimental.UtilityClass;import lombok.extern.slf4j.Slf4j;import java.lang.reflect.Array;import java.lang.reflect.InvocationTargetException;import java.util.*;import java.util.stream.Stream;/*** 将Object转换为指定的类型** @author zhouzhenyong* @since 2019/5/4 下午12:30*/@Slf4j@UtilityClasspublic class ObjectUtils {private final String NULL_STR = "null";public Boolean toBoolean(Object value) {if (null == value) {return null;}if (value instanceof Boolean) {return (Boolean) value;}return Boolean.valueOf((String) (value));}public Character toChar(Object value) {if (null == value) {return null;}if (value instanceof Character) {return (Character) value;}String valueStr = (String) (value);if (valueStr.length() == 0) {return null;}return valueStr.charAt(0);}public String toStr(Object value) {if (null == value) {return null;}if (value instanceof String) {return (String) value;}return String.valueOf(value);}public String toJsonStr(Object value) {if (null == value) {return null;}if (value instanceof String) {return (String) value;}return JSON.toJSONString(value);}public Byte toByte(Object value) {if (null == value) {return null;}try {if (value instanceof Number) {return ((Number) value).byteValue();}return Byte.valueOf((String) (value));} catch (NumberFormatException | ClassCastException e) {log.error(RPC_SDK_LOG_PRE + "toByte error", e);throw e;}}public Short toShort(Object value) {if (null == value) {return null;}try {if (value instanceof Number) {return ((Number) value).shortValue();}return Short.valueOf((String) (value));} catch (NumberFormatException | ClassCastException e) {log.error(RPC_SDK_LOG_PRE + "toShort error", e);throw e;}}public Integer toInt(Object value) {if (null == value) {return null;}try {if (value instanceof Number) {return ((Number) value).intValue();}return Integer.valueOf((String) (value));} catch (NumberFormatException | ClassCastException e) {log.error(RPC_SDK_LOG_PRE + "toInt error", e);throw e;}}public Long toLong(Object value) {if (null == value) {return null;}try {if (value instanceof Number) {return ((Number) value).longValue();}if (value instanceof java.sql.Date) {return ((java.sql.Date) value).getTime();}if (value instanceof java.sql.Time) {return ((java.sql.Time) value).getTime();}if (value instanceof java.sql.Timestamp) {return ((java.sql.Timestamp) value).getTime();}if (value instanceof Date) {return ((Date) value).getTime();}return Long.valueOf((String) (value));} catch (NumberFormatException | ClassCastException e) {log.error(RPC_SDK_LOG_PRE + "toLong error", e);throw e;}}public Double toDouble(Object value) {if (null == value) {return null;}try {if (value instanceof Number) {return ((Number) value).doubleValue();}return Double.valueOf((String) (value));} catch (NumberFormatException | ClassCastException e) {log.error(RPC_SDK_LOG_PRE + "toDouble error", e);throw e;}}public Float toFloat(Object value) {if (null == value) {return null;}try {if (value instanceof Number) {return ((Number) value).floatValue();}return Float.valueOf((String) (value));} catch (NumberFormatException | ClassCastException e) {log.error(RPC_SDK_LOG_PRE + "toFloat error", e);throw e;}}public <T> T toEnum(Class<T> tClass, Object value) {if (null == tClass || null == value) {return null;}if (tClass.isEnum() && value instanceof String) {return Stream.of(tClass.getEnumConstants()).filter(t -> t.toString().equalsIgnoreCase((String) value)).findFirst().orElse(null);}return null;}@SuppressWarnings({"unchecked", "rawtypes"})public <T> T[] toArray(Object value) {if (null == value) {return null;}if (value.getClass().isArray()) {return (T[]) value;}if (value instanceof Collection) {return (T[]) ((Collection) value).toArray();}return null;}@SuppressWarnings({"unchecked", "rawtypes"})public <T> T[] toArray(Class<T> tClass, Object value) {if (null == value) {return null;}if (value.getClass().isArray()) {return (T[]) value;}if (value instanceof Collection) {return (T[]) ((Collection) value).toArray();}if (String.class.isAssignableFrom(value.getClass()) && isArrayObject((String) value)) {return (T[]) (JSON.parseArray((String) value, tClass).toArray());}return null;}@SuppressWarnings({"unchecked", "rawtypes"})public <T> List<T> toList(Object value) {if (null == value) {return null;}if (List.class.isAssignableFrom(value.getClass())) {return (List) value;}if (Array.class.isAssignableFrom(value.getClass())) {return Arrays.asList(toArray(value));}if (Collection.class.isAssignableFrom(value.getClass())) {return new ArrayList((Collection) value);}return null;}@SuppressWarnings({"unchecked", "rawtypes"})public <T> List<T> toList(Class<T> tClass, Object value) {if (null == value || null == tClass) {return null;}if (List.class.isAssignableFrom(value.getClass())) {return (List<T>) value;}if (Array.class.isAssignableFrom(value.getClass())) {return Arrays.asList(toArray(value));}if (Collection.class.isAssignableFrom(value.getClass())) {return new ArrayList((Collection<T>) value);}if (String.class.isAssignableFrom(value.getClass()) && isArrayObject((String)value)) {return JSON.parseArray((String) value, tClass);}return null;}@SuppressWarnings({"unchecked", "rawtypes"})public <T> Set<T> toSet(Object value) {if (null == value) {return null;}if (Set.class.isAssignableFrom(value.getClass())) {return (Set) value;}if (Array.class.isAssignableFrom(value.getClass())) {return new HashSet(Arrays.asList(toArray(value)));}if (Collection.class.isAssignableFrom(value.getClass())) {return new HashSet<>((Collection) value);}return null;}@SuppressWarnings({"unchecked", "rawtypes"})public <T> Set<T> toSet(Class<T> tClass, Object value) {if (null == value || null == tClass) {return null;}if (Set.class.isAssignableFrom(value.getClass())) {return (Set) value;}if (Array.class.isAssignableFrom(value.getClass())) {return new HashSet(Arrays.asList(toArray(value)));}if (Collection.class.isAssignableFrom(value.getClass())) {return new HashSet<>((Collection) value);}if (String.class.isAssignableFrom(value.getClass()) && isArrayObject((String)value)) {return new HashSet<>(JSON.parseArray((String) value, tClass));}return null;}@SuppressWarnings({"unchecked", "rawtypes"})public <T> Queue<T> toQueue(Object value) {if (null == value) {return null;}if (Queue.class.isAssignableFrom(value.getClass())) {return (Queue) value;}if (Array.class.isAssignableFrom(value.getClass())) {return new ArrayDeque(Arrays.asList(toArray(value)));}if (Collection.class.isAssignableFrom(value.getClass())) {return new ArrayDeque<>((Collection) value);}return null;}@SuppressWarnings({"unchecked", "rawtypes"})public <T> Queue<T> toQueue(Class<T> tClass, Object value) {if (null == value) {return null;}if (Queue.class.isAssignableFrom(value.getClass())) {return (Queue) value;}if (Array.class.isAssignableFrom(value.getClass())) {return new ArrayDeque(Arrays.asList(toArray(value)));}if (Collection.class.isAssignableFrom(value.getClass())) {return new ArrayDeque<>((Collection) value);}if (String.class.isAssignableFrom(value.getClass()) && isArrayObject((String)value)) {return new ArrayDeque<>(JSON.parseArray((String) value, tClass));}return null;}@SuppressWarnings({"unchecked", "rawtypes"})public <T> Collection<T> toCollection(Object value) {if (null == value) {return null;}if (Collection.class.isAssignableFrom(value.getClass())) {return (Collection) value;}return null;}@SuppressWarnings({"unchecked", "rawtypes"})public <T> Collection<T> toCollection(Class<T> tClass, Object value) {if (null == value || null == tClass) {return null;}if (Collection.class.isAssignableFrom(value.getClass())) {return (Collection) value;}if (String.class.isAssignableFrom(value.getClass()) && isArrayObject((String)value)) {return JSON.parseArray((String) value, tClass);}return null;}@SuppressWarnings({"unchecked"})public <K, V> Map<K, V> toMap(Object value) {if (null == value) {return null;}if (value instanceof Map) {return (Map<K, V>) value;}return null;}/*** 将对象按照目标类型进行转换** @param tClass 要转出的类型* @param value 待转换的值* @param <T> 类型* @return 转换后的值*/@SuppressWarnings({"unchecked", "rawtypes"})public <T> T cast(Class<? extends T> tClass, Object value) {if (null == tClass || null == value) {return null;}// 对于是对应的实例,则直接转换,或者要抓换的是其父类,则也可以直接转换if (tClass.isInstance(value) || tClass.isAssignableFrom(value.getClass())) {return (T) value;}if (tClass == char.class || tClass == Character.class) {return (T) toChar(value);}if (tClass == String.class) {return (T) toJsonStr(value);}if (tClass == byte.class || tClass == Byte.class) {return (T) toByte(value);}if (tClass == short.class || tClass == Short.class) {return (T) toShort(value);}if (tClass == int.class || tClass == Integer.class) {return (T) toInt(value);}if (tClass == long.class || tClass == Long.class) {return (T) toLong(value);}if (tClass == float.class || tClass == Float.class) {return (T) toFloat(value);}if (tClass == double.class || tClass == Double.class) {return (T) toDouble(value);}if (tClass == boolean.class || tClass == Boolean.class) {return (T) toBoolean(value);}if (tClass.isEnum()) {return toEnum(tClass, value);}if (tClass.isArray() || Array.class.isAssignableFrom(tClass)) {return (T) toArray(value);}if (List.class.isAssignableFrom(tClass) && value instanceof List) {return (T) toList(value);}if (Set.class.isAssignableFrom(tClass) && value instanceof Set) {return (T) toSet(value);}if (Queue.class.isAssignableFrom(tClass) && value instanceof Queue) {return (T) toQueue(value);}if (Collection.class.isAssignableFrom(tClass) && value instanceof Collection) {return (T) toCollection(value);}// 如果是基本类型,则按照基本类型处理if (value.getClass().isPrimitive()) {return castStr(tClass, String.valueOf(value));}// value为String类型,则最后按照实体类型的json进行转换if(String.class.isAssignableFrom(value.getClass())) {String valueStr = (String) value;if(isJsonObject(valueStr)) {return JSON.parseObject((String) value, tClass);}}// value为 map 类型,则直接转换if(Map.class.isAssignableFrom(value.getClass())) {JSONObject jsonObject = new JSONObject();jsonObject.putAll((Map) value);return jsonObject.toJavaObject(tClass);}throw new ClassCastException("值 " + value + " 向类型 " + tClass.getName() + " 转换异常");}public boolean isJsonObject(String content) {if (isEmpty(content)) {return false;}try {if (content.startsWith("{") && content.endsWith("}")) {return true;}} catch (Throwable ignore) {}return false;}public boolean isArrayObject(String content) {if (isEmpty(content)) {return false;}try {if (content.startsWith("[") && content.endsWith("]")) {return true;}} catch (Throwable ignore) {}return false;}/*** 将对象的数据,按照cls类型进行转换** @param cls 待转换的Class类型* @param data 数据* @param <T> 返回类型* @return Class类型对应的对象*/public <T> T castStr(Class<T> cls, String data) {if (cls.equals(String.class)) {// 针对data为null的情况进行转换if (NULL_STR.equals(data)) {return null;}return cls.cast(data);} else if (Character.class.isAssignableFrom(cls)) {return cls.cast(data.toCharArray());} else {try {if (NULL_STR.equals(data)) {return null;}return cls.cast(cls.getMethod("valueOf", String.class).invoke(null, data));} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {log.error(RPC_SDK_LOG_PRE + "castStr error", e);}return null;}}/*** 对象是否为空* <p>* 种情况:* <ul>* <li>1.为null,则为空</li>* <li>2.为字符类型,则如果为空字符,则为空</li>* <li>3.为集合类型,则如果集合个数为空,则为空</li>* </ul>** @param object 待核查对象* @return true:为空,false:不空*/@SuppressWarnings("rawtypes")public Boolean isEmpty(Object object) {if (null == object) {return true;}if (object instanceof String) {String valueStr = (String) object;return "".equals(valueStr);}if (object instanceof Collection) {Collection collection = (Collection) object;return collection.isEmpty();}return false;}public Boolean isNotEmpty(Object object) {return !isEmpty(object);}}
object和list都可以转换,需要再加入ymlUtil
import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import lombok.experimental.UtilityClass;import lombok.extern.slf4j.Slf4j;import java.lang.reflect.Array;import java.lang.reflect.InvocationTargetException;import java.util.*;import java.util.stream.Stream;import static com.isyscore.os.config.client.constant.Constants.CONFIG_LOG_PRE;/*** @author shizi* @since 2020/11/16 2:24 PM*/@Slf4j@UtilityClasspublic class ObjectUtils {private final String NULL_STR = "null";public Boolean toBoolean(Object value) {if (null == value) {return null;}if (value instanceof Boolean) {return (Boolean) value;}return Boolean.valueOf((String)(value));}public Character toChar(Object value) {if (null == value) {return null;}if (value instanceof Character) {return (Character) value;}String valueStr = (String)(value);if (valueStr.length() == 0) {return null;}return valueStr.charAt(0);}public String toStr(Object value) {if (null == value) {return null;}if (value instanceof String) {return (String) value;}return String.valueOf(value);}public String toJsonStr(Object value) {if (null == value) {return null;}if (value instanceof String) {return (String) value;}return JSON.toJSONString(value);}public Byte toByte(Object value) {if (null == value) {return null;}try {if (value instanceof Number) {return ((Number) value).byteValue();}return Byte.valueOf((String)(value));} catch (NumberFormatException | ClassCastException e) {log.error(CONFIG_LOG_PRE + "toByte error", e);throw e;}}public Short toShort(Object value) {if (null == value) {return null;}try {if (value instanceof Number) {return ((Number) value).shortValue();}return Short.valueOf((String)(value));} catch (NumberFormatException | ClassCastException e) {log.error(CONFIG_LOG_PRE + "toShort error", e);throw e;}}public Integer toInt(Object value) {if (null == value) {return null;}try {if (value instanceof Number) {return ((Number) value).intValue();}return Integer.valueOf((String)(value));} catch (NumberFormatException | ClassCastException e) {log.error(CONFIG_LOG_PRE + "toInt error", e);throw e;}}public Long toLong(Object value) {if (null == value) {return null;}try {if (value instanceof Number) {return ((Number) value).longValue();}if (value instanceof java.sql.Date) {return ((java.sql.Date) value).getTime();}if (value instanceof java.sql.Time) {return ((java.sql.Time) value).getTime();}if (value instanceof java.sql.Timestamp) {return ((java.sql.Timestamp) value).getTime();}if (value instanceof java.util.Date) {return ((java.util.Date) value).getTime();}return Long.valueOf((String)(value));} catch (NumberFormatException | ClassCastException e) {log.error(CONFIG_LOG_PRE + "toLong error", e);throw e;}}public Double toDouble(Object value) {if (null == value) {return null;}try {if (value instanceof Number) {return ((Number) value).doubleValue();}return Double.valueOf((String)(value));} catch (NumberFormatException | ClassCastException e) {log.error(CONFIG_LOG_PRE + "toDouble error", e);throw e;}}public Float toFloat(Object value) {if (null == value) {return null;}try {if (value instanceof Number) {return ((Number) value).floatValue();}return Float.valueOf((String)(value));} catch (NumberFormatException | ClassCastException e) {log.error(CONFIG_LOG_PRE + "toFloat error", e);throw e;}}public <T> T toEnum(Class<T> tClass, Object value) {if (null == tClass || null == value) {return null;}if (tClass.isEnum() && value instanceof String) {return Stream.of(tClass.getEnumConstants()).filter(t -> t.toString().equalsIgnoreCase((String) value)).findFirst().orElse(null);}return null;}@SuppressWarnings({"unchecked", "rawtypes"})public <T> T[] toArray(Object value) {if (null == value) {return null;}if (value.getClass().isArray()) {return (T[]) value;}if (value instanceof Collection) {return (T[]) ((Collection) value).toArray();}return null;}@SuppressWarnings({"unchecked", "rawtypes"})public <T> List<T> toList(Object value) {if (null == value) {return null;}if (List.class.isAssignableFrom(value.getClass())) {return (List) value;}if (Array.class.isAssignableFrom(value.getClass())) {return Arrays.asList(toArray(value));}if (Collection.class.isAssignableFrom(value.getClass())) {return new ArrayList((Collection) value);}return null;}@SuppressWarnings({"unchecked", "rawtypes"})public <T> Set<T> toSet(Object value) {if (null == value) {return null;}if (Set.class.isAssignableFrom(value.getClass())) {return (Set) value;}if (Array.class.isAssignableFrom(value.getClass())) {return new HashSet(Arrays.asList(toArray(value)));}if (Collection.class.isAssignableFrom(value.getClass())) {return new HashSet<>((Collection) value);}return null;}@SuppressWarnings({"unchecked", "rawtypes"})public <T> Queue<T> toQueue(Object value) {if (null == value) {return null;}if (Queue.class.isAssignableFrom(value.getClass())) {return (Queue) value;}if (Array.class.isAssignableFrom(value.getClass())) {return new ArrayDeque(Arrays.asList(toArray(value)));}if (Collection.class.isAssignableFrom(value.getClass())) {return new ArrayDeque<>((Collection) value);}return null;}@SuppressWarnings({"unchecked", "rawtypes"})public <T> Collection<T> toCollection(Object value) {if (null == value) {return null;}if (Collection.class.isAssignableFrom(value.getClass())) {return (Collection) value;}return null;}@SuppressWarnings({"unchecked"})public <K, V> Map<K, V> toMap(Object value) {if (null == value) {return null;}if (value instanceof Map) {return (Map<K, V>) value;}return null;}/*** 将对象按照目标类型进行转换** @param tClass 要转出的类型* @param value 待转换的值* @param <T> 类型* @return 转换后的值*/@SuppressWarnings({"unchecked", "rawtypes"})public <T> Object cast(Class<? extends T> tClass, Object value) {if (null == tClass || null == value) {return null;}// 对于是对应的实例,则直接转换,或者要抓换的是其父类,则也可以直接转换if (tClass.isInstance(value) || tClass.isAssignableFrom(value.getClass())) {return (T) value;}if (tClass == char.class || tClass == Character.class) {return (T) toChar(value);}if (tClass == String.class) {return (T) toJsonStr(value);}if (tClass == byte.class || tClass == Byte.class) {return (T) toByte(value);}if (tClass == short.class || tClass == Short.class) {return (T) toShort(value);}if (tClass == int.class || tClass == Integer.class) {return (T) toInt(value);}if (tClass == long.class || tClass == Long.class) {return (T) toLong(value);}if (tClass == float.class || tClass == Float.class) {return (T) toFloat(value);}if (tClass == double.class || tClass == Double.class) {return (T) toDouble(value);}if (tClass == boolean.class || tClass == Boolean.class) {return (T) toBoolean(value);}if (tClass.isEnum()) {return toEnum(tClass, value);}if (tClass.isArray() || Array.class.isAssignableFrom(tClass)) {return (T) toArray(value);}if (List.class.isAssignableFrom(tClass) && value instanceof List) {return (T) toList(value);}if (Set.class.isAssignableFrom(tClass) && value instanceof Set) {return (T) toSet(value);}if (Queue.class.isAssignableFrom(tClass) && value instanceof Queue) {return (T) toQueue(value);}if (Collection.class.isAssignableFrom(tClass) && value instanceof Collection) {return (T) toCollection(value);}// 如果是基本类型,则按照基本类型处理if (value.getClass().isPrimitive()) {return castStr(tClass, (String)(value));}// value为String类型,则最后按照实体类型的json进行转换if(String.class.isAssignableFrom(value.getClass())) {String valueStr = (String) value;if(YamlUtil.isJsonObject(valueStr)) {return JSON.parseObject((String) value, tClass);} else if(YamlUtil.isJsonArray(valueStr)) {return JSON.parseArray((String) value, tClass);} else if(YamlUtil.isProperties(valueStr)) {return cast(tClass, YamlUtil.yamlToJson(YamlUtil.propertiesToYaml(valueStr)));} else if(YamlUtil.isYaml(valueStr)) {return cast(tClass, YamlUtil.yamlToJson(valueStr));}}if (Properties.class.isAssignableFrom(value.getClass())) {return cast(tClass, YamlUtil.propertiesToJson((Properties)value));}// value为 map 类型,则直接转换if(Map.class.isAssignableFrom(value.getClass())) {JSONObject jsonObject = new JSONObject();jsonObject.putAll((Map) value);return jsonObject.toJavaObject(tClass);}throw new ClassCastException("值 " + value + " 向类型 " + tClass.getName() + " 转换异常");}/*** 将对象的数据,按照cls类型进行转换** @param cls 待转换的Class类型* @param data 数据* @param <T> 返回类型* @return Class类型对应的对象*/public <T> T castStr(Class<T> cls, String data) {if (cls.equals(String.class)) {// 针对data为null的情况进行转换if (NULL_STR.equals(data)) {return null;}return cls.cast(data);} else if (Character.class.isAssignableFrom(cls)) {return cls.cast(data.toCharArray());} else {try {if (NULL_STR.equals(data)) {return null;}return cls.cast(cls.getMethod("valueOf", String.class).invoke(null, data));} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {log.error(CONFIG_LOG_PRE + "castStr error", e);}return null;}}/*** 对象是否为空* <p>* 种情况:* <ul>* <li>1.为null,则为空</li>* <li>2.为字符类型,则如果为空字符,则为空</li>* <li>3.为集合类型,则如果集合个数为空,则为空</li>* </ul>** @param object 待核查对象* @return true:为空,false:不空*/@SuppressWarnings("rawtypes")public Boolean isEmpty(Object object) {if (null == object) {return true;}if (object instanceof String) {String valueStr = (String) object;return "".equals(valueStr);}if (object instanceof Collection) {Collection collection = (Collection) object;return collection.isEmpty();}return false;}public Boolean isNotEmpty(Object object) {return !isEmpty(object);}}
yamlUtil
见这里
