io.github.dengchen2020.core.utils.RequestUtils Maven / Gradle / Ivy
package io.github.dengchen2020.core.utils;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import java.io.IOException;
/**
* 请求扩展工具类
*
* @author dengchen
* @since 2023/8/22
*/
public abstract class RequestUtils extends RequestContextHolder {
private static final Logger log = LoggerFactory.getLogger(RequestUtils.class);
/**
* 获取当前请求上下文属性
*/
public static ServletRequestAttributes getCurrRequestAttributes() {
RequestAttributes requestAttributes = getRequestAttributes();
if (requestAttributes == null) {
throw new RuntimeException("获取当前请求上下文属性失败");
}
return (ServletRequestAttributes) requestAttributes;
}
/**
* 获取当前请求
* @return
*/
public static HttpServletRequest getCurrRequest() {
return getCurrRequestAttributes().getRequest();
}
/**
* 获取当前响应
* @return
*/
public static HttpServletResponse getCurrResponse() {
return getCurrRequestAttributes().getResponse();
}
/**
* 获取接口地址,包含域名、端口
*
* @return
*/
public static String getPath() {
return getPath(getCurrRequest());
}
/**
* 获取接口地址,包含域名、端口
*
* @param request
* @return
*/
public static String getPath(HttpServletRequest request) {
if (request == null) {
return null;
}
String scheme = request.getScheme();
int port = request.getServerPort();
String path = scheme + "://" + request.getServerName();
if ((scheme.equals("http") && (port != 80))
|| (scheme.equals("https") && (port != 443))) {
path += ":" + request.getServerPort();
}
path += request.getRequestURI();
return path;
}
/**
* 解析body数据
*
* @return
*/
public static String getBody() {
return getBody(getCurrRequest());
}
/**
* 解析body数据
*
* @param request
* @return
*/
public static String getBody(HttpServletRequest request) {
if (request == null) {
return null;
}
try {
return new String(request.getInputStream().readAllBytes());
} catch (IOException e) {
log.error("body数据解析异常:{}", e.toString());
}
return null;
}
}