import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializeConfig;
import cn.molu.app.handle.BusinessException;
import cn.molu.app.vo.ResponseVo;
import lombok.extern.slf4j.Slf4j;
/**
* 对象工具类
*
* @Description
* @author 陌路
* @date 2022-07-22 下午6:50:47
*/
@Slf4j
public class ObjUtils {
/**
* 获取字符串数据
*
* @desc 对象转为字符串
* @param obj
* @return String
*/
public static String getStr(Object obj) {
if (null == obj)
return "";
if (obj instanceof String)
if ("".equals(obj) || obj.toString().trim().length() < 1 || StringUtils.isBlank((String) obj))
return "";
return obj.toString().trim();
}
/**
* 判断对象是否为空
*
* @desc 仅当对象为null或者没值时返回true
* @param obj
* @return boolean
*/
public static boolean isEmpty(Object obj) {
if (null == obj)
return true;
if (obj instanceof String)
return StringUtils.isBlank(getStr(obj));
if (obj instanceof Collection<?>)
return ((Collection<?>) obj).isEmpty();
if (obj instanceof Map<?, ?>)
return ((Map<?, ?>) obj).isEmpty();
if (obj instanceof Object[])
return Arrays.asList((Object[]) obj).isEmpty();
return ObjectUtils.isEmpty(obj);
}
/**
* 判断集合数据内容是否为空
*
* @desc 仅当所有值都为null||""时返回true
* @param c
* @return boolean
*/
public static boolean collIsBlank(Collection<?> c) {
if (null == c || c.isEmpty())
return true;
int i = 0;
for (Object v : c = new HashSet<>(c)) {
if (isEmpty(v))
i++;
}
return c.size() == i;
}
/**
* 判断Map集合内容是否为空
*
* @desc 仅当所有值都为null||""时返回true
* @param m
* @return boolean
*/
public static boolean mapIsBlank(Map<?, ?> m) {
if (null == m || m.isEmpty())
return true;
if (m.keySet().isEmpty())
return true;
return collIsBlank(m.values());
}
/**
* @desc 仅当有一个值都为null||""时返回true
* @param obj
* @return boolean
*/
public static boolean isEmpty(Object... obj) {
if (null == obj)
return true;
for (Object o : obj) {
if (StringUtils.isBlank(getStr(o)))
return true;
}
return false;
}
/**
* JSON数据转Map集合
*
* @param json
* @return Map<?,?>
*/
public static Map<?, ?> jsonToMap(String s) {
if (StringUtils.isBlank(s))
return new HashMap<String, String>();
return JSONObject.parseObject(s, Map.class);
}
/**
* Map集合转Object
*
* @return T
*/
public static <T> T mapToObj(Map<String, Object> map, Class<T> obj) {
if (null == obj || null == map || map.isEmpty())
return null;
return JSONObject.parseObject(toJSON(map), obj);
}
/**
* @title 对象数据转JSONString数据
* @Desc 实现了 SerializeConfig.globalInstance
*/
public static String toJSON(Object obj) {
if (isEmpty(obj))
return "";
return getStr(JSONObject.toJSON(obj, SerializeConfig.globalInstance));
}
/**
* JSON数据转对象
*
* @return T
*/
public static <T> T toObj(String jsonStr, Class<T> obj) {
if (StringUtils.isBlank(jsonStr) || null != obj)
return null;
return JSONObject.parseObject(jsonStr, obj);
}
/**
* 数据检验,有一个值为空则结束执行,并抛出errMsg异常
*
* @desc 为true时校验通过
* @return boolean
*/
public static boolean checkData(String errMsg, Object... params) {
if (StringUtils.isBlank(errMsg))
errMsg = ResponseVo.PARAM_ERR_STR;
if (null == params || isEmpty(params)) {
log.error("数据校验失败。。。");
throw new BusinessException(errMsg);
}
return true;
}
/**
* 比较两个对象是否相等
*
* @return boolean
*/
public static boolean equals(Object o1, Object o2) {
if (StringUtils.equals(getStr(o1), getStr(o2)) || o1.equals(o2))
return true;
return false;
}
/**
* 比较两个对象是否相等
*
* @return boolean
*/
public static boolean equalsIgnoreCase(Object o1, Object o2) {
if (StringUtils.equalsIgnoreCase(getStr(o1), getStr(o2)))
return true;
return false;
}
/**
* 把Map集合转为XML字符串
*
* @desc Map的Key和Value必须为String类型
* @param m
* @return String
*/
public static String mapToXML(Map<String, String> m) {
if (isEmpty(m))
return "";
StringBuffer sbf = new StringBuffer();
m.forEach((k, v) -> {
if (!isEmpty(k))
sbf.append(String.format("<%s>%s</%s>", k, getStr(v), k));
});
return sbf.toString();
}
/**
* 替换字符串中的?
*
* @param str
* @param val
* @return String
*/
public static String getVal(String str, String... val) {
String format = "";
for (String v : val) {
format = String.format(str, v);
}
return format;
}
/**
* 获取格式化日期 y-M-d H:m:s
*
* @return String
*/
public static String dateFormat() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
}
/**
* @Title 格式化日期
* @return String
*/
public static String dateFormat(Date date, String pattern) {
date = "".equals(getStr(date)) ? new Date() : date;
pattern = "".equals(getStr(pattern)) ? "yyyy-MM-dd HH:mm:ss" : pattern;
return new SimpleDateFormat(pattern).format(date);
}
/**
* 获取用户真实IP地址
*
* @param request
* @desc 不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真实IP地址,
* 如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,哪个才是真实IP?
* 答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。
* 如:X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130,
* 192.168.1.100 用户真实IP为: 192.168.1.110
*/
public static String getIp(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (isEmpty(ip) || "unknown".equalsIgnoreCase(ip))
ip = request.getHeader("Proxy-Client-IP");
if (isEmpty(ip) || "unknown".equalsIgnoreCase(ip))
ip = request.getHeader("WL-Proxy-Client-IP");
if (isEmpty(ip) || "unknown".equalsIgnoreCase(ip))
ip = request.getHeader("HTTP_CLIENT_IP");
if (isEmpty(ip) || "unknown".equalsIgnoreCase(ip))
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
if (isEmpty(ip) || "unknown".equalsIgnoreCase(ip))
ip = request.getRemoteAddr();
if (ip.replace(" ", "").replace("unknown,", "").indexOf(",") > 0)
ip = ip.substring(0, ip.indexOf(","));
return getStr(ip);
}
}
对象工具类
于 2022-07-14 17:21:21 首次发布