概述
import cn.hutool.core.util.StrUtil;
import lombok.SneakyThrows;
import java.lang.reflect.Field;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 参数替换工具类
*/
public class ParamReplaceUtil {
public static final Pattern pattern = Pattern.compile("<(.*?)>");
/**
* 将<>参数里面的内容全部替换成param的参数
*
* @param original 原始字符串
* @param param 参数
* @return 替换后的数据
*/
public static String replace(String original, Map<String, String> param) {
if (StrUtil.isEmpty(original)) {
return original;
}
Matcher matcher = pattern.matcher(original);
while (matcher.find()) {
if (param.containsKey(matcher.group(1))) {
original = original.replaceAll("<" + matcher.group(1) + ">", param.get(matcher.group(1)));
}
}
return original;
}
/**
* <user.name>
* 替换单表达式类型
*
* @param original 原表达式
* @param params 参数
* @return 替换后的类型
*/
@SneakyThrows
public static Object replaceSingle(String original, Object[] params) {
if (StrUtil.isEmpty(original)) {
return original;
}
Matcher matcher = pattern.matcher(original);
if (matcher.find()) {
String el = matcher.group(1);
String className = el.split("\.")[0];
String filedName = el.split("\.")[1];
for (Object o : params) {
Class<?> clazz = o.getClass();
if (clazz.getSimpleName().equals(captureName(className))) {
Field field = null;
try {
field = clazz.getDeclaredField(filedName);
} catch (NoSuchFieldException e) {
field=clazz.getSuperclass().getDeclaredField(filedName);
}
field.setAccessible(true);
return field.get(o);
}
}
}
return original;
}
/**
* <user.name>,哈哈哈<user.id>
* 替换多表达式字符串
* @param original 原始字符串
* @param params 参数
* @return 替换后的字符串
*/
@SneakyThrows
public static String replaceMultiple(String original, Object[] params){
if (StrUtil.isEmpty(original)) {
return original;
}
Matcher matcher = pattern.matcher(original);
while (matcher.find()) {
String el = matcher.group(1);
String className = el.split("\.")[0];
String filedName = el.split("\.")[1];
for (Object o : params) {
Class<?> clazz = o.getClass();
if (clazz.getSimpleName().equals(captureName(className))) {
Field field = null;
try {
field = clazz.getDeclaredField(filedName);
} catch (NoSuchFieldException e) {
field=clazz.getSuperclass().getDeclaredField(filedName);
}
field.setAccessible(true);
original=original.replaceAll("<" + matcher.group(1) + ">",ObjectUtil.toString(field.get(o)) );;
}
}
}
return original;
}
/**
* 将字符串的首字母转大写
*
* @param str 需要转换的字符串
* @return
*/
public static String captureName(String str) {
// 进行字母的ascii编码前移,效率要高于截取字符串进行转换的操作
char[] cs = str.toCharArray();
cs[0] -= 32;
return String.valueOf(cs);
}
}
2、具体注解中的使用
@PostMapping("/test1")
@ApiOperation("测试1")
@OperationLogAnno(operatePage="<user.id>",operateType="984894",bizType="98979894")
public String list1(@RequestBody User user){
log.info("用户信息:"+ JSONUtil.toJsonStr(user));
return "sss";
}
3、切面中的用法
Object[] params = joinPoint.getArgs();
// 获取方法上声明的注解
OperationLogAnno anno = objMethod.getDeclaredAnnotation(OperationLogAnno.class);
log.info("operatePage:{}", ParamReplaceUtil.replaceSingle(anno.operatePage(),params));
log.info("operateType:{}",ParamReplaceUtil.replaceMultiple(anno.operateType(), params));
最后
以上就是单身酒窝为你收集整理的java 使用参数替换工具类获取注解入参中的参数的全部内容,希望文章能够帮你解决java 使用参数替换工具类获取注解入参中的参数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复