diff --git a/hippo4j-common/pom.xml b/hippo4j-common/pom.xml
index a9c47599..320c0fba 100644
--- a/hippo4j-common/pom.xml
+++ b/hippo4j-common/pom.xml
@@ -71,6 +71,11 @@
com.github.ben-manes.caffeine
caffeine
+
+
+ com.github.dozermapper
+ dozer-core
+
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 0459027b..e654f091 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
@@ -18,6 +18,8 @@
package cn.hippo4j.common.toolkit;
import cn.hippo4j.common.web.exception.IllegalException;
+import com.github.dozermapper.core.DozerBeanMapperBuilder;
+import com.github.dozermapper.core.Mapper;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.springframework.beans.BeanUtils;
@@ -25,7 +27,7 @@ import org.springframework.beans.BeanUtils;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
-import java.util.Map;
+import java.util.*;
/**
* Bean util.
@@ -33,6 +35,40 @@ import java.util.Map;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class BeanUtil {
+ protected static Mapper BEAN_MAPPER_BUILDER;
+
+ static {
+ BEAN_MAPPER_BUILDER = DozerBeanMapperBuilder.buildDefault();
+ }
+
+ public static T convert(S source, Class clazz) {
+ return Optional.ofNullable(source)
+ .map(each -> BEAN_MAPPER_BUILDER.map(each, clazz))
+ .orElse(null);
+ }
+
+ 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)));
+ return targetList;
+ })
+ .orElse(null);
+ }
+
+ public static Set convert(Set sources, Class clazz) {
+ return Optional.ofNullable(sources)
+ .map(each -> {
+ Set targetSize = new HashSet(each.size());
+ each.stream()
+ .forEach(item -> targetSize.add(BEAN_MAPPER_BUILDER.map(item, clazz)));
+ return targetSize;
+ })
+ .orElse(null);
+ }
+
/**
* copyProperties
*
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 c24c4a42..4ecf14df 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
@@ -17,19 +17,94 @@
package cn.hippo4j.common.toolkit;
-import lombok.Getter;
-import lombok.Setter;
+import com.github.dozermapper.core.converters.ConversionException;
+import lombok.*;
import org.junit.Assert;
import org.junit.Test;
import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
public class BeanUtilTest {
+
+ @Test
+ public void beanToMapConvertTest() {
+ // 测试BeanToMap
+ final Person person = new Person();
+ person.setName("Hippo4j");
+ person.setAge(1);
+ person.setAddress("hippo4j.cn");
+ person.setSize(999);
+ final Map, ?> convert = BeanUtil.convert(person, Map.class);
+ Assert.assertEquals("Hippo4j", convert.get("name"));
+ Assert.assertEquals(1, convert.get("age"));
+ Assert.assertEquals("hippo4j.cn", convert.get("address"));
+ Assert.assertEquals(999, convert.get("size"));
+ }
+
+ @Test
+ public void mapToBeanConvertTest() {
+ // 测试MapToBean
+ final HashMap map = new HashMap<>();
+ map.put("name", "Hippo4j");
+ map.put("age", 1);
+ map.put("address", "hippo4j.cn");
+ map.put("size", 999);
+ final Person person = BeanUtil.convert(map, Person.class);
+ Assert.assertEquals("Hippo4j", person.getName());
+ Assert.assertEquals(1, person.getAge());
+ Assert.assertEquals("hippo4j.cn", person.getAddress());
+ Assert.assertEquals(999, (int) person.getSize());
+ }
+
+ @Test
+ public void ListToListConvertTest() {
+ final List list = new ArrayList<>();
+ list.add(Person.builder().name("one").age(1).build());
+ list.add(Person.builder().name("two").age(2).build());
+ list.add(Person.builder().name("three").age(3).build());
+
+ final List persons = BeanUtil.convert(list, PersonVo.class);
+ Assert.assertEquals(list.size(), persons.size());
+ }
+
@Test
+ public void SetToSetConvertTest() {
+ final Set sets = new HashSet<>();
+ sets.add(Person.builder().name("one").age(1).build());
+ sets.add(Person.builder().name("two").age(2).build());
+ sets.add(Person.builder().name("three").age(3).build());
+
+ final Set persons = BeanUtil.convert(sets, PersonVo.class);
+ Assert.assertEquals(sets.size(), persons.size());
+ }
+
+ @Test
+ public void copyPropertiesBeanToMapTest() {
+ // 测试BeanToMap
+ final Person person = new Person();
+ person.setName("Hippo4j");
+
+ final Map, ?> convert = BeanUtil.convert(person, Map.class);
+ Assert.assertEquals("Hippo4j", convert.get("name"));
+
+ // static属性应被忽略
+ Assert.assertFalse(convert.containsKey("STATIC_NAME"));
+ }
+
+ /**
+ * 测试在不忽略错误情况下,转换失败需要报错。
+ */
+ @Test(expected = ConversionException.class)
+ public void mapToBeanWinErrorTest() {
+ final Map map = new HashMap<>();
+ map.put("age", "Hippo4j");
+ BeanUtil.convert(map, Person.class);
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+
public void testMapToBean() {
Map map = new HashMap<>();
map.put("name", "Test");
@@ -51,14 +126,34 @@ public class BeanUtilTest {
Assert.assertEquals("setName", name.getName());
}
+ @Getter
+ @Setter
+ @Builder
+ @AllArgsConstructor
+ @NoArgsConstructor
+ public static class Person {
+
+ public static final String STATIC_NAME = "STATIC_NAME";
+
+ private String name;
+ private int age;
+ private String address;
+ private Integer size;
+ }
+
+ @Setter
+ public static class PersonVo {
+
+ private String name;
+ private int age;
+ }
+
@Getter
@Setter
static class Customer {
String name;
-
Integer status;
-
}
@Getter
@@ -66,8 +161,6 @@ public class BeanUtilTest {
static class PreCustomer {
String name;
-
Integer status;
-
}
}
diff --git a/hippo4j-config/pom.xml b/hippo4j-config/pom.xml
index 52640adf..e999ccdd 100644
--- a/hippo4j-config/pom.xml
+++ b/hippo4j-config/pom.xml
@@ -49,17 +49,6 @@
runtime
-
- cn.hippo4j
- hippo4j-common
- ${revision}
-
-
-
- com.github.dozermapper
- dozer-core
-
-
org.projectlombok
lombok
diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ConfigServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ConfigServiceImpl.java
index 49e5e0d3..bf70a5b9 100644
--- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ConfigServiceImpl.java
+++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ConfigServiceImpl.java
@@ -35,7 +35,7 @@ import cn.hippo4j.config.model.biz.notify.NotifyReqDTO;
import cn.hippo4j.config.service.ConfigCacheService;
import cn.hippo4j.config.service.ConfigChangePublisher;
import cn.hippo4j.config.service.biz.*;
-import cn.hippo4j.config.toolkit.BeanUtil;
+import cn.hippo4j.common.toolkit.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/HisRunDataServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/HisRunDataServiceImpl.java
index 2d2f593d..1c4c93af 100644
--- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/HisRunDataServiceImpl.java
+++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/HisRunDataServiceImpl.java
@@ -33,7 +33,7 @@ import cn.hippo4j.config.model.biz.monitor.MonitorQueryReqDTO;
import cn.hippo4j.config.model.biz.monitor.MonitorRespDTO;
import cn.hippo4j.config.monitor.QueryMonitorExecuteChoose;
import cn.hippo4j.config.service.biz.HisRunDataService;
-import cn.hippo4j.config.toolkit.BeanUtil;
+import cn.hippo4j.common.toolkit.BeanUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.AllArgsConstructor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ItemServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ItemServiceImpl.java
index 959955c5..b2966cdf 100644
--- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ItemServiceImpl.java
+++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ItemServiceImpl.java
@@ -28,7 +28,7 @@ import cn.hippo4j.config.model.biz.item.ItemUpdateReqDTO;
import cn.hippo4j.config.model.biz.threadpool.ThreadPoolRespDTO;
import cn.hippo4j.config.service.biz.ItemService;
import cn.hippo4j.config.service.biz.ThreadPoolService;
-import cn.hippo4j.config.toolkit.BeanUtil;
+import cn.hippo4j.common.toolkit.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/NotifyServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/NotifyServiceImpl.java
index 7b9c6685..5696cb0c 100644
--- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/NotifyServiceImpl.java
+++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/NotifyServiceImpl.java
@@ -30,7 +30,7 @@ import cn.hippo4j.config.model.biz.notify.NotifyQueryReqDTO;
import cn.hippo4j.config.model.biz.notify.NotifyReqDTO;
import cn.hippo4j.config.model.biz.notify.NotifyRespDTO;
import cn.hippo4j.config.service.biz.NotifyService;
-import cn.hippo4j.config.toolkit.BeanUtil;
+import cn.hippo4j.common.toolkit.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/OperationLogServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/OperationLogServiceImpl.java
index eee236bd..7cadd49e 100644
--- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/OperationLogServiceImpl.java
+++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/OperationLogServiceImpl.java
@@ -23,7 +23,7 @@ import cn.hippo4j.config.model.LogRecordInfo;
import cn.hippo4j.config.model.biz.log.LogRecordQueryReqDTO;
import cn.hippo4j.config.model.biz.log.LogRecordRespDTO;
import cn.hippo4j.config.service.biz.OperationLogService;
-import cn.hippo4j.config.toolkit.BeanUtil;
+import cn.hippo4j.common.toolkit.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/TenantServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/TenantServiceImpl.java
index f3a0baa6..1945562d 100644
--- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/TenantServiceImpl.java
+++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/TenantServiceImpl.java
@@ -29,7 +29,7 @@ import cn.hippo4j.config.model.biz.tenant.TenantSaveReqDTO;
import cn.hippo4j.config.model.biz.tenant.TenantUpdateReqDTO;
import cn.hippo4j.config.service.biz.ItemService;
import cn.hippo4j.config.service.biz.TenantService;
-import cn.hippo4j.config.toolkit.BeanUtil;
+import cn.hippo4j.common.toolkit.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ThreadPoolServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ThreadPoolServiceImpl.java
index b26016b9..8c58e935 100644
--- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ThreadPoolServiceImpl.java
+++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ThreadPoolServiceImpl.java
@@ -30,7 +30,7 @@ import cn.hippo4j.config.model.biz.threadpool.ThreadPoolSaveOrUpdateReqDTO;
import cn.hippo4j.config.service.biz.ConfigService;
import cn.hippo4j.config.service.biz.OperationLogService;
import cn.hippo4j.config.service.biz.ThreadPoolService;
-import cn.hippo4j.config.toolkit.BeanUtil;
+import cn.hippo4j.common.toolkit.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/BeanUtil.java b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/BeanUtil.java
deleted file mode 100644
index ad4c3879..00000000
--- a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/BeanUtil.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package cn.hippo4j.config.toolkit;
-
-import com.github.dozermapper.core.DozerBeanMapperBuilder;
-import com.github.dozermapper.core.Mapper;
-
-import java.util.*;
-
-/**
- * Bean util.
- */
-public class BeanUtil {
-
- private BeanUtil() {
-
- }
-
- protected static Mapper BEAN_MAPPER_BUILDER;
-
- static {
- BEAN_MAPPER_BUILDER = DozerBeanMapperBuilder.buildDefault();
- }
-
- public static T convert(S source, Class clazz) {
- return Optional.ofNullable(source)
- .map(each -> BEAN_MAPPER_BUILDER.map(each, clazz))
- .orElse(null);
- }
-
- 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)));
- return targetList;
- })
- .orElse(null);
- }
-
- public static Set convert(Set sources, Class clazz) {
- return Optional.ofNullable(sources)
- .map(each -> {
- Set targetSize = new HashSet(each.size());
- each.stream()
- .forEach(item -> targetSize.add(BEAN_MAPPER_BUILDER.map(item, clazz)));
- return targetSize;
- })
- .orElse(null);
- }
-}
diff --git a/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/BeanUtilTest.java b/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/BeanUtilTest.java
deleted file mode 100644
index 2c393a03..00000000
--- a/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/BeanUtilTest.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package cn.hippo4j.config.toolkit;
-
-import cn.hippo4j.common.toolkit.Assert;
-import com.github.dozermapper.core.converters.ConversionException;
-import lombok.*;
-import org.junit.Test;
-
-import java.util.*;
-
-/**
- * BeanUtil Test
- */
-public class BeanUtilTest {
-
- @Test
- public void beanToMapConvertTest() {
- // 测试BeanToMap
- final Person person = new Person();
- person.setName("Hippo4j");
- person.setAge(1);
- person.setAddress("hippo4j.cn");
- person.setSize(999);
- final Map, ?> convert = BeanUtil.convert(person, Map.class);
- Assert.isTrue(Objects.equals("Hippo4j", convert.get("name")));
- Assert.isTrue(Objects.equals(1, convert.get("age")));
- Assert.isTrue(Objects.equals("hippo4j.cn", convert.get("address")));
- Assert.isTrue(Objects.equals(999, convert.get("size")));
- }
-
- @Test
- public void mapToBeanConvertTest() {
- // 测试MapToBean
- final HashMap map = new HashMap<>();
- map.put("name", "Hippo4j");
- map.put("age", 1);
- map.put("address", "hippo4j.cn");
- map.put("size", 999);
- final Person person = BeanUtil.convert(map, Person.class);
- Assert.isTrue(Objects.equals("Hippo4j", person.getName()));
- Assert.isTrue(Objects.equals(1, person.getAge()));
- Assert.isTrue(Objects.equals("hippo4j.cn", person.getAddress()));
- Assert.isTrue(Objects.equals(999, person.getSize()));
- }
-
- @Test
- public void ListToListConvertTest() {
- final List list = new ArrayList<>();
- list.add(Person.builder().name("one").age(1).build());
- list.add(Person.builder().name("two").age(2).build());
- list.add(Person.builder().name("three").age(3).build());
-
- final List persons = BeanUtil.convert(list, PersonVo.class);
- Assert.isTrue(Objects.equals(list.size(), persons.size()));
- }
-
- @Test
- public void SetToSetConvertTest() {
- final Set sets = new HashSet<>();
- sets.add(Person.builder().name("one").age(1).build());
- sets.add(Person.builder().name("two").age(2).build());
- sets.add(Person.builder().name("three").age(3).build());
-
- final Set persons = BeanUtil.convert(sets, PersonVo.class);
- Assert.isTrue(Objects.equals(sets.size(), persons.size()));
- }
-
- @Test
- public void copyPropertiesBeanToMapTest() {
- // 测试BeanToMap
- final Person person = new Person();
- person.setName("Hippo4j");
-
- final Map, ?> convert = BeanUtil.convert(person, Map.class);
- Assert.isTrue(Objects.equals("Hippo4j", convert.get("name")));
-
- // static属性应被忽略
- Assert.isTrue(!convert.containsKey("STATIC_NAME"));
- }
-
- /**
- * 测试在不忽略错误情况下,转换失败需要报错。
- */
- @Test(expected = ConversionException.class)
- public void mapToBeanWinErrorTest() {
- final Map map = new HashMap<>();
- map.put("age", "Hippo4j");
- BeanUtil.convert(map, Person.class);
- }
-
- // -----------------------------------------------------------------------------------------------------------------
-
- @Getter
- @Setter
- @Builder
- @AllArgsConstructor
- @NoArgsConstructor
- public static class Person {
-
- public static final String STATIC_NAME = "STATIC_NAME";
-
- private String name;
- private int age;
- private String address;
- private Integer size;
- }
-
- @Setter
- public static class PersonVo {
-
- private String name;
- private int age;
- }
-}
diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ThreadPoolController.java b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ThreadPoolController.java
index a2f6acdb..f0da644b 100644
--- a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ThreadPoolController.java
+++ b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ThreadPoolController.java
@@ -32,7 +32,7 @@ import cn.hippo4j.config.model.biz.threadpool.ThreadPoolRespDTO;
import cn.hippo4j.config.model.biz.threadpool.ThreadPoolSaveOrUpdateReqDTO;
import cn.hippo4j.config.service.ConfigCacheService;
import cn.hippo4j.config.service.biz.ThreadPoolService;
-import cn.hippo4j.config.toolkit.BeanUtil;
+import cn.hippo4j.common.toolkit.BeanUtil;
import cn.hippo4j.console.model.ThreadPoolInstanceInfo;
import cn.hippo4j.console.model.WebThreadPoolReqDTO;
import cn.hippo4j.console.model.WebThreadPoolRespDTO;