From 60f66900c2ef9ffdfc8e1821c06faf5a2714accd Mon Sep 17 00:00:00 2001 From: wangyu <727842003@qq.com> Date: Mon, 22 Mar 2021 23:43:01 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=89=A9=E5=B1=95rest-bean=E8=83=BD?= =?UTF-8?q?=E5=8A=9B=EF=BC=8C=E6=94=AF=E6=8C=81=E6=8F=90=E4=BE=9B=E8=A1=A8?= =?UTF-8?q?=E6=A0=BC=EF=BC=8C=E8=A1=A8=E6=A0=BC=E5=89=8D=E7=AB=AF=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E7=8A=B6=E6=80=81=E5=88=87=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../compiler/core/MemoryClassLoader.java | 27 ++++++++++++++++++- .../framework/domain/po/OnlineForm.java | 20 ++++++++++++++ .../framework/beans/meta/BeanController.java | 8 +++++- .../framework/beans/meta/BeanInfo.java | 6 +++++ .../framework/beans/meta/RestBean.java | 15 +++++++++++ 5 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 flyfish-data/src/main/java/com/flyfish/framework/domain/po/OnlineForm.java diff --git a/flyfish-common/src/main/java/com/flyfish/framework/compiler/core/MemoryClassLoader.java b/flyfish-common/src/main/java/com/flyfish/framework/compiler/core/MemoryClassLoader.java index 703ad6f..19a7708 100644 --- a/flyfish-common/src/main/java/com/flyfish/framework/compiler/core/MemoryClassLoader.java +++ b/flyfish-common/src/main/java/com/flyfish/framework/compiler/core/MemoryClassLoader.java @@ -1,5 +1,7 @@ package com.flyfish.framework.compiler.core; +import org.apache.commons.lang3.StringUtils; + import java.net.URL; import java.net.URLClassLoader; import java.util.Map; @@ -26,10 +28,33 @@ class MemoryClassLoader extends URLClassLoader { return super.findClass(name); } classBytes.remove(name); - return defineClass(name, buf, 0, buf.length); + return defineClass(name, buf); } public Map getClassBytes() { return classBytes; } + + /** + * 修复获取package为null的问题,定义并验证class + * + * @param name 名称 + * @param buf 二进制数据 + * @return 结果 + */ + @SuppressWarnings("all") + private Class defineClass(String name, byte[] buf) { + // 先定义class,然后在上下文基础上判断package有效性 + Class defined = defineClass(name, buf, 0, buf.length); + synchronized (defined) { + // 补偿定义包,防止缺失 + if (null == defined.getPackage()) { + // 包名 + String packageName = StringUtils.substringBeforeLast(name, "."); + definePackage(packageName, null, null, + null, null, null, null, null); + } + } + return defined; + } } diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/po/OnlineForm.java b/flyfish-data/src/main/java/com/flyfish/framework/domain/po/OnlineForm.java new file mode 100644 index 0000000..f45ca32 --- /dev/null +++ b/flyfish-data/src/main/java/com/flyfish/framework/domain/po/OnlineForm.java @@ -0,0 +1,20 @@ +package com.flyfish.framework.domain.po; + +import com.flyfish.framework.domain.base.Domain; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.data.mongodb.core.mapping.Document; + +/** + * 在线表单 + */ +@Document("online-forms") +@Data +@EqualsAndHashCode(callSuper = true) +public class OnlineForm extends Domain { + + // 配置信息 + private String form; + + +} diff --git a/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanController.java b/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanController.java index 1ef8cd3..7d08906 100644 --- a/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanController.java +++ b/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanController.java @@ -2,6 +2,7 @@ package com.flyfish.framework.beans.meta; import com.flyfish.framework.bean.Result; import com.flyfish.framework.beans.resolver.DynamicRestBeanResolver; +import com.flyfish.framework.domain.base.Vo; import com.flyfish.framework.utils.StringFormats; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ClassUtils; @@ -42,7 +43,12 @@ public class BeanController { BeanInfo info = new BeanInfo(); info.setCode(StringFormats.camel2Line(ClassUtils.getShortClassName(clazz))); if (clazz.isAnnotationPresent(RestBean.class)) { - info.setName(clazz.getAnnotation(RestBean.class).name()); + RestBean annotation = clazz.getAnnotation(RestBean.class); + info.setName(annotation.name()); + info.setSearch(BeanProperty.from(annotation.queryClass())); + if (!Vo.class.equals(annotation.listViewClass())) { + info.setColumns(BeanProperty.from(annotation.listViewClass())); + } } info.setProperties(BeanProperty.from(clazz)); return Result.ok(info); diff --git a/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanInfo.java b/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanInfo.java index 5b4a2d9..18e4799 100644 --- a/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanInfo.java +++ b/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanInfo.java @@ -19,4 +19,10 @@ public class BeanInfo { // bean的属性们 private List properties; + + // 表格列属性 + private List columns; + + // 表格查询属性 + private List search; } diff --git a/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/RestBean.java b/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/RestBean.java index 3684c88..446ce53 100644 --- a/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/RestBean.java +++ b/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/RestBean.java @@ -4,6 +4,7 @@ import com.flyfish.framework.controller.BaseController; import com.flyfish.framework.controller.SafeController; import com.flyfish.framework.domain.base.NameLikeQo; import com.flyfish.framework.domain.base.Qo; +import com.flyfish.framework.domain.base.Vo; import com.flyfish.framework.repository.DefaultRepository; import com.flyfish.framework.service.BaseService; import com.flyfish.framework.service.impl.BaseServiceImpl; @@ -51,6 +52,20 @@ public @interface RestBean { */ Class queryClass() default NameLikeQo.class; + /** + * 指定列表视图 + * + * @return 结果 + */ + Class listViewClass() default Vo.class; + + /** + * 指定详情视图 + * + * @return 结果 + */ + Class viewClass() default Vo.class; + /** * 仓库的超类,默认是default *