package com.consum.base.core.utils;
|
// @formatter:off
|
|
import cn.hutool.core.util.ReflectUtil;
|
import com.fasterxml.jackson.databind.DeserializationFeature;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import jakarta.servlet.ServletInputStream;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServletResponse;import org.springframework.beans.BeanUtils;
|
import org.springframework.web.context.request.RequestContextHolder;
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
|
import java.io.BufferedReader;
|
import java.io.IOException;
|
import java.io.InputStreamReader;
|
import java.lang.reflect.Field;
|
import java.util.*;
|
import java.util.regex.Matcher;
|
import java.util.regex.Pattern;
|
|
/**
|
* .-~~~~~~~~~-._ _.-~~~~~~~~~-.
|
* __.' @Author ~. .~ 代码无Bug `.__
|
* .'// liu.q \./ (秘籍) \\`.
|
* .'// [916000612@qq.com] | 欲练神功 引刀自宫 \\`.
|
* .'// .-~"""""""~~~~-._ | _,-~~~~"""""""~-. \\`.
|
* .'//.-" 2019-04-09 `-. | .-' 10:48 "-.\\`.
|
* .'//______.============-.. \ | / ..-============.______\\`.
|
* .'______________________________\|/______________________________`.
|
*
|
* @Description :
|
*/
|
// @formatter:on
|
public class CommonUtil {
|
|
/**
|
* @Author : liuq
|
* @Date : Create in 2018/7/1 上午1:20
|
* @Description : 驼峰转下划线
|
*/
|
public static String camel2Underline(String line) {
|
if (line == null || "".equals(line)) {
|
return "";
|
}
|
line = String.valueOf(line.charAt(0)).toUpperCase().concat(line.substring(1));
|
StringBuffer sb = new StringBuffer(512);
|
Pattern pattern = Pattern.compile("[A-Z]([a-z\\d]+)?");
|
Matcher matcher = pattern.matcher(line);
|
while (matcher.find()) {
|
String word = matcher.group();
|
sb.append(word.toUpperCase());
|
sb.append(matcher.end() == line.length() ? "" : "_");
|
}
|
return sb.toString();
|
}
|
|
/*
|
* @Author : liu.q [916000612@qq.com]
|
*
|
* @Date : 2019-04-29 16:45
|
*
|
* @Description : 下划线转驼峰
|
*/
|
public static String Underline2camel(String para) {
|
StringBuilder result = new StringBuilder();
|
String[] a = para.split("_");
|
for (String s : a) {
|
if (!para.contains("_")) {
|
result.append(s);
|
continue;
|
}
|
if (result.length() == 0) {
|
result.append(s.toLowerCase());
|
} else {
|
result.append(s.substring(0, 1).toUpperCase());
|
result.append(s.substring(1).toLowerCase());
|
}
|
}
|
return result.toString();
|
}
|
|
/**
|
* @Author : liu.q
|
* @Date : 2019-03-01 09:49
|
* @Description : 获取request
|
*/
|
public static HttpServletRequest getRequest() {
|
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder
|
.getRequestAttributes();
|
HttpServletRequest request = requestAttributes.getRequest();
|
return request;
|
}
|
|
/**
|
* @Author : liu.q
|
* @Date : 2019-03-01 09:49
|
* @Description : response
|
*/
|
public static HttpServletResponse getResponse() {
|
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder
|
.getRequestAttributes();
|
HttpServletResponse response = requestAttributes.getResponse();
|
return response;
|
}
|
|
|
// /**
|
// * 获取请求参数
|
// *
|
// * @return
|
// */
|
public static Map getParameterMap() {
|
// 参数Map
|
Map properties = CommonUtil.getRequest().getParameterMap();
|
// 返回值Map
|
Map returnMap = new HashMap();
|
Iterator entries = properties.entrySet().iterator();
|
Map.Entry entry;
|
String name = "";
|
String value = "";
|
while (entries.hasNext()) {
|
entry = (Map.Entry) entries.next();
|
name = (String) entry.getKey();
|
Object valueObj = entry.getValue();
|
if (null == valueObj) {
|
continue;
|
} else if (valueObj instanceof String[]) {
|
String[] values = (String[]) valueObj;
|
for (int i = 0; i < values.length; i++) {
|
value = values[i] + ",";
|
}
|
value = value.substring(0, value.length() - 1);
|
} else {
|
value = valueObj.toString();
|
}
|
if ("".equals(value)) {
|
continue;
|
}
|
returnMap.put(name, value);
|
}
|
|
// 判断排序asc和desc
|
if (returnMap.containsKey("sortOrder") && returnMap.get("sortOrder") != null && returnMap.get("sortOrder") != "") {
|
if (!"DESC".equals(convert2Str(returnMap.get("sortOrder")).toUpperCase())
|
&& !"ASC".equals(convert2Str(returnMap.get("sortOrder")).toUpperCase())) {
|
returnMap.put("sortOrder", "");
|
}
|
}
|
return returnMap;
|
}
|
|
private static String convert2Str(Object object) {
|
if (object == null) {
|
return "";
|
}
|
if (object instanceof String) {
|
return (String) object;
|
} else {
|
return object.toString();
|
}
|
|
}
|
|
|
private static ObjectMapper mapper = null;
|
|
static {
|
mapper = new ObjectMapper();
|
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
}
|
|
|
public static <T> T getObjFromReq(Class<T> clazz) {
|
T t = null;
|
try {
|
Map parameterMap = getParameterMap();
|
String jsonStr = mapper.writeValueAsString(parameterMap);
|
t = mapper.readValue(jsonStr, clazz);
|
if (t == null) {
|
t = clazz.newInstance();
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return t;
|
}
|
|
public static <T> T getObjFromReqBody(Class<T> clazz) {
|
T t = null;
|
try {
|
String jsonStr = getRequestBody();
|
t = mapper.readValue(jsonStr, clazz);
|
if (t == null) {
|
return clazz.newInstance();
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return t;
|
}
|
|
public static String getStringFromInputStream(ServletInputStream stream) throws IOException {
|
StringBuilder sb = new StringBuilder();
|
BufferedReader reader = null;
|
try {
|
reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
|
char[] ch = new char[1024];
|
int bytesRead;
|
while ((bytesRead = reader.read(ch)) != -1) {
|
sb.append(ch, 0, bytesRead);
|
}
|
} finally {
|
if (reader != null) {
|
try {
|
reader.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
return sb.toString();
|
}
|
|
/**
|
* 获取request body值
|
*
|
* @param
|
* @return
|
*/
|
private static String getRequestBody() {
|
HttpServletRequest request = getRequest();
|
try {
|
return getStringFromInputStream(request.getInputStream());
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
public static void copyProperties(Object source, Object target) {
|
BeanUtils.copyProperties(source, target);
|
Class<?> sourceClass = source.getClass();
|
// 获取当前类以及所有父类的字段
|
while (sourceClass != null) {
|
Field[] fields = sourceClass.getDeclaredFields();
|
for (Field field : fields) {
|
String fieldName = field.getName();
|
if (!fieldName.startsWith("isset_")) {
|
continue;
|
}
|
try {
|
Object fieldValue = ReflectUtil.getFieldValue(source, field);
|
ReflectUtil.setFieldValue(target, field, fieldValue);
|
} catch (Exception e) {
|
System.out.println(e.getMessage());
|
}
|
}
|
sourceClass = sourceClass.getSuperclass();
|
}
|
}
|
|
}
|