diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/PermissionServiceImpl.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/PermissionServiceImpl.java index b1f6d5a6..83787200 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/PermissionServiceImpl.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/PermissionServiceImpl.java @@ -44,7 +44,7 @@ public class PermissionServiceImpl implements PermissionService { public IPage listPermission(int pageNo, int pageSize) { PermissionQueryPageReqDTO queryPage = new PermissionQueryPageReqDTO(pageNo, pageSize); IPage selectPage = permissionMapper.selectPage(queryPage, null); - return selectPage.convert(each -> BeanUtil.copyProperties(each, new PermissionRespDTO())); + return selectPage.convert(each -> BeanUtil.convert(each, PermissionRespDTO.class)); } @Override diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/RoleServiceImpl.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/RoleServiceImpl.java index 15885e98..b298bb70 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/RoleServiceImpl.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/RoleServiceImpl.java @@ -51,7 +51,7 @@ public class RoleServiceImpl implements RoleService { public IPage listRole(int pageNo, int pageSize) { RoleQueryPageReqDTO queryPage = new RoleQueryPageReqDTO(pageNo, pageSize); IPage selectPage = roleMapper.selectPage(queryPage, null); - return selectPage.convert(each -> BeanUtil.copyProperties(each, new RoleRespDTO())); + return selectPage.convert(each -> BeanUtil.convert(each, RoleRespDTO.class)); } @Override diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/UserServiceImpl.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/UserServiceImpl.java index 731280e8..b500fa06 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/UserServiceImpl.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/UserServiceImpl.java @@ -58,7 +58,7 @@ public class UserServiceImpl implements UserService { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(UserInfo.class) .eq(StringUtil.isNotBlank(reqDTO.getUserName()), UserInfo::getUserName, reqDTO.getUserName()); IPage selectPage = userMapper.selectPage(reqDTO, queryWrapper); - return selectPage.convert(each -> BeanUtil.copyProperties(each, new UserRespDTO())); + return selectPage.convert(each -> BeanUtil.convert(each, UserRespDTO.class)); } @Override @@ -70,7 +70,7 @@ public class UserServiceImpl implements UserService { throw new RuntimeException("用户名重复"); } reqDTO.setPassword(bCryptPasswordEncoder.encode(reqDTO.getPassword())); - UserInfo insertUser = BeanUtil.copyProperties(reqDTO, new UserInfo()); + UserInfo insertUser = BeanUtil.convert(reqDTO, UserInfo.class); userMapper.insert(insertUser); } @@ -79,7 +79,7 @@ public class UserServiceImpl implements UserService { if (StringUtil.isNotBlank(reqDTO.getPassword())) { reqDTO.setPassword(bCryptPasswordEncoder.encode(reqDTO.getPassword())); } - UserInfo updateUser = BeanUtil.copyProperties(reqDTO, new UserInfo()); + UserInfo updateUser = BeanUtil.convert(reqDTO, UserInfo.class); LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(UserInfo.class) .eq(UserInfo::getUserName, reqDTO.getUserName()); userMapper.update(updateUser, updateWrapper); @@ -107,7 +107,7 @@ public class UserServiceImpl implements UserService { Wrapper queryWrapper = Wrappers.lambdaQuery(UserInfo.class).eq(UserInfo::getUserName, reqDTO.getUserName()); UserInfo userInfo = userMapper.selectOne(queryWrapper); UserRespDTO respUser = Optional.ofNullable(userInfo) - .map(each -> BeanUtil.copyProperties(each, new UserRespDTO())) + .map(each -> BeanUtil.convert(each, UserRespDTO.class)) .orElseThrow(() -> new ServiceException("查询无此用户, 可以尝试清空缓存或退出登录.")); return respUser; } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/BeanUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/BeanUtil.java index 271bf623..523f56a9 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/BeanUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/BeanUtil.java @@ -47,12 +47,17 @@ public class BeanUtil { .orElse(null); } + public static T convert(S source, T target) { + Optional.ofNullable(source) + .ifPresent(each -> BEAN_MAPPER_BUILDER.map(each, target)); + return target; + } + public static List convert(List sources, Class clazz) { return Optional.ofNullable(sources) .map(each -> { List targetList = new ArrayList(each.size()); - each.stream() - .forEach(item -> targetList.add(BEAN_MAPPER_BUILDER.map(item, clazz))); + each.forEach(item -> targetList.add(BEAN_MAPPER_BUILDER.map(item, clazz))); return targetList; }) .orElse(null); @@ -62,41 +67,12 @@ public class BeanUtil { return Optional.ofNullable(sources) .map(each -> { Set targetSize = new HashSet(each.size()); - each.stream() - .forEach(item -> targetSize.add(BEAN_MAPPER_BUILDER.map(item, clazz))); + each.forEach(item -> targetSize.add(BEAN_MAPPER_BUILDER.map(item, clazz))); return targetSize; }) .orElse(null); } - /** - * copyProperties - * - * @param source source obj - * @param target target obj - * @param target type - * @param source type - * @return T - */ - public static T copyProperties(S source, T target) { - return copyProperties(source, target, (String) null); - } - - /** - * copyProperties - * - * @param source source obj - * @param target target obj - * @param ignoreProperties ignore name - * @param target type - * @param source type - * @return T - */ - public static T copyProperties(S source, T target, String... ignoreProperties) { - BeanUtils.copyProperties(source, target, ignoreProperties); - return target; - } - public static T mapToBean(Map map, Class clazz, boolean toCamelCase) { if (clazz == null) { return null; @@ -127,7 +103,7 @@ public class BeanUtil { } Class clazz = bean.getClass(); map.forEach((s, o) -> { - String name = toCamelCase ? StringUtil.toUnderlineCase(s) : s; + String name = toCamelCase ? StringUtil.toCamelCase(s, StringUtil.UNDERLINE) : s; Method method = setter(clazz, name); if (method != null) { ReflectUtil.invoke(bean, method, o); diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/StringUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/StringUtil.java index 2212b1e3..553d2acb 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/StringUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/StringUtil.java @@ -195,6 +195,34 @@ public class StringUtil { return sb.toString(); } + /** + * to camel case + * + * @param str CharSequence + * @param symbol symbol + * @return toCamelCase String + */ + public static String toCamelCase(CharSequence str, char symbol) { + if (null == str || str.length() == 0) { + return null; + } + int length = str.length(); + StringBuilder sb = new StringBuilder(length); + boolean upperCase = false; + for (int i = 0; i < length; ++i) { + char c = str.charAt(i); + if (c == symbol) { + upperCase = true; + } else if (upperCase) { + sb.append(Character.toUpperCase(c)); + upperCase = false; + } else { + sb.append(c); + } + } + return sb.toString(); + } + /** * Replace a portion of the string, replacing all found * diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/BeanUtilTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/BeanUtilTest.java index b4895b06..05caeaf0 100644 --- a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/BeanUtilTest.java +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/BeanUtilTest.java @@ -104,13 +104,14 @@ public class BeanUtilTest { // ----------------------------------------------------------------------------------------------------------------- + @Test public void testMapToBean() { Map map = new HashMap<>(); map.put("name", "Test"); - map.put("status", 12); + map.put("status_code", 12); Customer customer = BeanUtil.mapToBean(map, Customer.class, true); Assert.assertEquals("Test", customer.getName()); - Assert.assertEquals(Integer.valueOf(12), customer.getStatus()); + Assert.assertEquals(Integer.valueOf(12), customer.getStatusCode()); } @Test @@ -152,7 +153,7 @@ public class BeanUtilTest { static class Customer { String name; - Integer status; + Integer statusCode; } @Getter @@ -160,6 +161,6 @@ public class BeanUtilTest { static class PreCustomer { String name; - Integer status; + Integer statusCode; } } diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/StringUtilTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/StringUtilTest.java index 7c0067ff..d2f9173c 100644 --- a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/StringUtilTest.java +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/StringUtilTest.java @@ -90,4 +90,11 @@ public class StringUtilTest { String s = StringUtil.toSymbolCase(string, StringUtil.UNDERLINE); Assert.isTrue(Objects.equals(s, "str")); } + + @Test + public void toCamelCase() { + String string = "str_str"; + String s = StringUtil.toCamelCase(string, StringUtil.UNDERLINE); + Assert.isTrue(Objects.equals(s, "strStr")); + } } diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/ThreadPoolRunStateHandler.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/ThreadPoolRunStateHandler.java index 0f794c46..62b9b1ab 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/ThreadPoolRunStateHandler.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/ThreadPoolRunStateHandler.java @@ -76,7 +76,7 @@ public class ThreadPoolRunStateHandler extends AbstractThreadPoolRuntime { rejectedName = pool.getRejectedExecutionHandler().getClass().getSimpleName(); } poolRunStateInfo.setRejectedName(rejectedName); - ManyThreadPoolRunStateInfo manyThreadPoolRunStateInfo = BeanUtil.copyProperties(poolRunStateInfo, new ManyThreadPoolRunStateInfo()); + ManyThreadPoolRunStateInfo manyThreadPoolRunStateInfo = BeanUtil.convert(poolRunStateInfo, ManyThreadPoolRunStateInfo.class); manyThreadPoolRunStateInfo.setIdentify(CLIENT_IDENTIFICATION_VALUE); String active = environment.getProperty("spring.profiles.active", "UNKNOWN"); manyThreadPoolRunStateInfo.setActive(active.toUpperCase()); diff --git a/hippo4j-monitor/hippo4j-monitor-elasticsearch/src/main/java/cn/hippo4j/monitor/es/EsMonitorHandler.java b/hippo4j-monitor/hippo4j-monitor-elasticsearch/src/main/java/cn/hippo4j/monitor/es/EsMonitorHandler.java index 8f92a9a7..505712c4 100644 --- a/hippo4j-monitor/hippo4j-monitor-elasticsearch/src/main/java/cn/hippo4j/monitor/es/EsMonitorHandler.java +++ b/hippo4j-monitor/hippo4j-monitor-elasticsearch/src/main/java/cn/hippo4j/monitor/es/EsMonitorHandler.java @@ -60,7 +60,7 @@ public class EsMonitorHandler extends AbstractDynamicThreadPoolMonitor { @Override protected void execute(ThreadPoolRunStateInfo poolRunStateInfo) { - EsThreadPoolRunStateInfo esThreadPoolRunStateInfo = BeanUtil.copyProperties(poolRunStateInfo, new EsThreadPoolRunStateInfo()); + EsThreadPoolRunStateInfo esThreadPoolRunStateInfo = BeanUtil.convert(poolRunStateInfo, EsThreadPoolRunStateInfo.class); Environment environment = ApplicationContextHolder.getInstance().getEnvironment(); String indexName = environment.getProperty("es.thread-pool-state.index.name", "thread-pool-state"); String applicationName = environment.getProperty("spring.application.name", "application"); diff --git a/hippo4j-monitor/hippo4j-monitor-micrometer/src/main/java/cn/hippo4j/monitor/micrometer/MicrometerMonitorHandler.java b/hippo4j-monitor/hippo4j-monitor-micrometer/src/main/java/cn/hippo4j/monitor/micrometer/MicrometerMonitorHandler.java index 0bacecd6..844685b7 100644 --- a/hippo4j-monitor/hippo4j-monitor-micrometer/src/main/java/cn/hippo4j/monitor/micrometer/MicrometerMonitorHandler.java +++ b/hippo4j-monitor/hippo4j-monitor-micrometer/src/main/java/cn/hippo4j/monitor/micrometer/MicrometerMonitorHandler.java @@ -54,7 +54,7 @@ public class MicrometerMonitorHandler extends AbstractDynamicThreadPoolMonitor { if (stateInfo == null) { RUN_STATE_CACHE.put(poolRunStateInfo.getTpId(), poolRunStateInfo); } else { - BeanUtil.copyProperties(poolRunStateInfo, stateInfo); + BeanUtil.convert(poolRunStateInfo, stateInfo); } Environment environment = ApplicationContextHolder.getInstance().getEnvironment(); String applicationName = environment.getProperty("spring.application.name", "application"); diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/AdapterExecutorsRefreshListener.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/AdapterExecutorsRefreshListener.java index d4b36ce0..e0a2dde2 100644 --- a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/AdapterExecutorsRefreshListener.java +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/AdapterExecutorsRefreshListener.java @@ -64,7 +64,7 @@ public class AdapterExecutorsRefreshListener extends AbstractRefreshListener { if (Objects.equals(val.mark(), each.getMark())) { - val.updateThreadPool(BeanUtil.copyProperties(each, new ThreadPoolAdapterParameter())); + val.updateThreadPool(BeanUtil.convert(each, ThreadPoolAdapterParameter.class)); DynamicThreadPoolAdapterRegister.ADAPTER_EXECUTORS_MAP.put(buildKey, each); } }); diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/collect/RunTimeInfoCollector.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/collect/RunTimeInfoCollector.java index b78887e2..33fc7259 100644 --- a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/collect/RunTimeInfoCollector.java +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/collect/RunTimeInfoCollector.java @@ -49,7 +49,7 @@ public class RunTimeInfoCollector extends AbstractThreadPoolRuntime implements C List listThreadPoolId = GlobalThreadPoolManage.listThreadPoolId(); for (String each : listThreadPoolId) { ThreadPoolRunStateInfo poolRunState = getPoolRunState(each); - RuntimeMessage runtimeMessage = BeanUtil.copyProperties(poolRunState, new RuntimeMessage()); + RuntimeMessage runtimeMessage = BeanUtil.convert(poolRunState, RuntimeMessage.class); runtimeMessage.setGroupKey(getThreadPoolIdentify(each, properties.getItemId(), properties.getNamespace())); runtimeMessages.add(runtimeMessage); }