From 902fd70eb4196910ed630cdcbdd6fd8acb6321c3 Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Tue, 16 Jan 2018 15:58:24 +0800 Subject: [PATCH] =?UTF-8?q?ConvertDisabled=E5=A2=9E=E5=8A=A0ConvertType?= =?UTF-8?q?=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/org/redkale/convert/ConvertDisabled.java | 23 ++++++++++++++++++++ src/org/redkale/convert/ConvertFactory.java | 19 ++++++++++++++++ src/org/redkale/convert/ObjectDecoder.java | 2 +- src/org/redkale/convert/ObjectEncoder.java | 2 +- 4 files changed, 44 insertions(+), 2 deletions(-) diff --git a/src/org/redkale/convert/ConvertDisabled.java b/src/org/redkale/convert/ConvertDisabled.java index f86e384ea..4c6b7ee26 100644 --- a/src/org/redkale/convert/ConvertDisabled.java +++ b/src/org/redkale/convert/ConvertDisabled.java @@ -21,4 +21,27 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; @Retention(RUNTIME) public @interface ConvertDisabled { + /** + * 解析/序列化定制化的TYPE + * + * @return JSON or BSON or ALL + */ + ConvertType type() default ConvertType.ALL; + + /** + * ConvertDisabled 的多用类 + * + *

+ * 详情见: https://redkale.org + * + * @author zhangjx + */ + @Inherited + @Documented + @Target({METHOD, FIELD}) + @Retention(RUNTIME) + public static @interface ConvertDisableds { + + ConvertDisabled[] value(); + } } diff --git a/src/org/redkale/convert/ConvertFactory.java b/src/org/redkale/convert/ConvertFactory.java index 41f8765e0..7cd653138 100644 --- a/src/org/redkale/convert/ConvertFactory.java +++ b/src/org/redkale/convert/ConvertFactory.java @@ -149,6 +149,25 @@ public abstract class ConvertFactory { return this; } + public boolean isConvertDisabled(AccessibleObject element) { + ConvertDisabled[] ccs = element.getAnnotationsByType(ConvertDisabled.class); + if (ccs.length == 0 && element instanceof Method) { + final Method method = (Method) element; + String fieldName = readGetSetFieldName(method); + if (fieldName != null) { + try { + ccs = method.getDeclaringClass().getDeclaredField(fieldName).getAnnotationsByType(ConvertDisabled.class); + } catch (Exception e) { //说明没有该字段,忽略异常 + } + } + } + final ConvertType ct = this.getConvertType(); + for (ConvertDisabled ref : ccs) { + if (ref.type().contains(ct)) return true; + } + return false; + } + public ConvertColumnEntry findRef(AccessibleObject element) { if (element == null) return null; ConvertColumnEntry en = this.columnEntrys.get(element); diff --git a/src/org/redkale/convert/ObjectDecoder.java b/src/org/redkale/convert/ObjectDecoder.java index d8612e638..6b5acf4e7 100644 --- a/src/org/redkale/convert/ObjectDecoder.java +++ b/src/org/redkale/convert/ObjectDecoder.java @@ -89,7 +89,7 @@ public final class ObjectDecoder implements Decodeable implements Encodeable