14 KiB
14 KiB
JAVA常用工具类
HttpRequestUtil
作用:对HttpReuquest对象进行操作的工具类
public class HttpRequestUtil {
/**
* 获取请求IP地址
*/
public static String getIpAddr(HttpServletRequest request) throws IOException {
// 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址
String ip = request.getHeader("X-Forwarded-For");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
} else if (ip.length() > 15) {
String[] ips = ip.split(",");
for (int index = 0; index < ips.length; index++) {
String strIp = (String) ips[index];
if (!("unknown".equalsIgnoreCase(strIp))) {
ip = strIp;
break;
}
}
}
return ip;
}
/**
* 获取代理信息
*/
public static String getAgent(HttpServletRequest request){
return request.getHeader("user-agent");
}
}
Base64ToMultipartFile
作用:实现了MultipartFile接口 可以接受Base64编码后的文件
/**
* @author dss
* @since 2022/8/8
*/
public class Base64ToMultipartFile implements MultipartFile {
private final byte[] fileContent;
private final String extension;
private final String contentType;
private final String name;
private final String id = "file_"+ UUID.randomUUID().toString();
public Base64ToMultipartFile(String base64,String name) {
if (base64==null) throw new MyException(RestResponse.MSG.UPLOAD_EXCEPTION).setMsg("文件解析失败");
String[] split = base64.split(",");
if (split==null||split.length!=2) throw new MyException(RestResponse.MSG.UPLOAD_EXCEPTION).setMsg("文件解析失败");
String uri = split[0];
String data = split[1];
try {
this.fileContent = Base64.getDecoder().decode(data.getBytes(StandardCharsets.UTF_8));
}catch (IllegalArgumentException e){
throw new MyException(RestResponse.MSG.UPLOAD_EXCEPTION).setMsg("文件解析失败");
}
this.extension = uri.split(";")[0].split("/")[1];
this.contentType = uri.split(";")[0].split(":")[1];
this.name=name;
}
/**
* @param base64
* @param dataUri 格式类似于: data:image/png;base64
* @param name
*/
public Base64ToMultipartFile(String base64, String dataUri, String name) {
try {
this.fileContent = Base64.getDecoder().decode(base64.getBytes(StandardCharsets.UTF_8));
}catch (IllegalArgumentException e){
throw new MyException(RestResponse.MSG.UPLOAD_EXCEPTION).setMsg("文件解析失败");
}
this.extension = dataUri.split(";")[0].split("/")[1];
this.contentType = dataUri.split(";")[0].split(":")[1];
this.name = name;
}
public Base64ToMultipartFile(String base64, String extension, String contentType, String name) {
try {
this.fileContent = Base64.getDecoder().decode(base64.getBytes(StandardCharsets.UTF_8));
}catch (IllegalArgumentException e){
throw new MyException(RestResponse.MSG.UPLOAD_EXCEPTION).setMsg("文件解析失败");
}
this.extension = extension;
this.contentType = contentType;
this.name = name;
}
@Override
public String getName() {
if (name==null){
return id;
}
return name;
}
@Override
public String getOriginalFilename() {
if (name==null){
return id + "." + extension;
}
return name+"."+extension;
}
@Override
public String getContentType() {
return contentType;
}
@Override
public boolean isEmpty() {
return fileContent == null || fileContent.length == 0;
}
@Override
public long getSize() {
return fileContent.length;
}
@Override
public byte[] getBytes() throws IOException {
return fileContent;
}
@Override
public ByteArrayInputStream getInputStream() throws IOException {
return new ByteArrayInputStream(fileContent);
}
@Override
public void transferTo(File file) throws IOException, IllegalStateException {
try (FileOutputStream fos = new FileOutputStream(file)) {
fos.write(fileContent);
}
}
/**
* 实列
*/
public static void main(String[] args) {
StringBuilder s = new StringBuilder("data:image/png;base64,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");
Base64ToMultipartFile base64ToMultipartFile = new Base64ToMultipartFile(s.toString(),null);
System.out.println(base64ToMultipartFile.getOriginalFilename());
}
}
SpringContextUtil
作用:使用静态方法从Spring容器中获取Bean对象
@Component
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextUtil.applicationContext = applicationContext;
}
//获取applicationContext
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
//通过name获取 Bean.
public static Object getBean(String name) {
return getApplicationContext().getBean(name);
}
//通过class获取Bean.
public static <T> T getBean(Class<T> clazz) {
return getApplicationContext().getBean(clazz);
}
//通过name,以及Clazz返回指定的Bean
public static <T> T getBean(String name, Class<T> clazz) {
return getApplicationContext().getBean(name, clazz);
}
}
TransactionUtil
作用:手动事务控制
@Component
@Scope("prototype")
public class TransactionUtils {
private TransactionStatus status;
private final DataSourceTransactionManager dataSourceTransactionManager;
public TransactionUtils(DataSourceTransactionManager dataSourceTransactionManager){
this.dataSourceTransactionManager = dataSourceTransactionManager;
}
//开始事务
public TransactionStatus begin() {
status = dataSourceTransactionManager.getTransaction(new DefaultTransactionAttribute());
return status;
}
//提交事务
public void commit(TransactionStatus transaction) {
dataSourceTransactionManager.commit(transaction);
}
//回滚事务
public void rollback() {
dataSourceTransactionManager.rollback(status);
}
}
ReflectionUtils
作用:通过反射获取某个类的所有属性
public class ReflectionUtils {
/**
* 获取某个一个类所有的属性(包括所有父类)
* @param clazz 目标类
* @return 所有属性集合
*/
public static <T> List<Field> reflectForField(Class<T> clazz) {
Class tmpClazz = clazz;
List<Field> fieldList = new ArrayList<>();
while (tmpClazz != null) {
if (tmpClazz.equals(Object.class)) {
tmpClazz = tmpClazz.getSuperclass();
continue;
}
fieldList.addAll(new ArrayList<>(Arrays.asList(tmpClazz.getDeclaredFields())));
tmpClazz = tmpClazz.getSuperclass();
}
return fieldList;
}
/**
* 获取某个类的某个属性(包括父类)
* @param clazz 目标类
* @param filedName 属性名称
* @return 属性
*/
public static<T> Field getDeclaredField(Class<T> clazz,String filedName){
List<Field> fieldList = reflectForField(clazz);
for (int i = 0; i < fieldList.size(); i++) {
if (fieldList.get(i).getName().equals(filedName)){
return fieldList.get(i);
}
}
return null;
}
}