diff --git a/.github/workflows/maven_snapshot.yml b/.github/workflows/maven_snapshot.yml index 9b9dff166..accfec89c 100644 --- a/.github/workflows/maven_snapshot.yml +++ b/.github/workflows/maven_snapshot.yml @@ -29,5 +29,6 @@ jobs: - name: Build with Maven run: mvn --batch-mode -e -X clean deploy -DskipTests=true env: - MAVEN_GPG_KEY: aaaaaa + MAVEN_GPG_KEY: ${{ secrets.OSSRHGPGKEY }} MAVEN_GPG_PASSPHRASE: ${{ secrets.OSSRHGPGPASSWORD }} + MAVEN_GPG_KEY_FINGERPRINT: CD4C40E804D972E2569BF61A4E3BD7A9E43CC39E diff --git a/src/main/java/org/redkale/convert/ConvertCoder.java b/src/main/java/org/redkale/convert/ConvertCoder.java index acbbed3ef..633eee637 100644 --- a/src/main/java/org/redkale/convert/ConvertCoder.java +++ b/src/main/java/org/redkale/convert/ConvertCoder.java @@ -2,11 +2,10 @@ */ package org.redkale.convert; +import java.lang.annotation.*; import static java.lang.annotation.ElementType.*; import static java.lang.annotation.RetentionPolicy.*; -import java.lang.annotation.*; - /** * 依附在setter、getter方法、字段进行简单的配置
* 优先使用coder字段 @@ -42,7 +41,11 @@ public @interface ConvertCoder { /** * 序列化定制化的 Encodeable, 构造函数的参数可以是:
- * 1、ConvertFactory 2、Type 3、Class 4、ConvertFactory和Type 5、ConvertFactory和Class + * 1、ConvertFactory
+ * 2、Type
+ * 3、Class
+ * 4、ConvertFactory和Type
+ * 5、ConvertFactory和Class
* *

类如果存在instance单实例对象字段值,则优先使用instance对象 * @@ -52,7 +55,11 @@ public @interface ConvertCoder { /** * 反序列化定制化的 Decodeable, 构造函数的参数可以是:
- * 1、ConvertFactory 2、Type 3、Class 4、ConvertFactory和Type 5、ConvertFactory和Class + * 1、ConvertFactory
+ * 2、Type
+ * 3、Class
+ * 4、ConvertFactory和Type
+ * 5、ConvertFactory和Class
* *

类如果存在instance单实例对象字段值,则优先使用instance对象 * diff --git a/src/main/java/org/redkale/convert/ConvertColumn.java b/src/main/java/org/redkale/convert/ConvertColumn.java index 581e90a79..a1837e981 100644 --- a/src/main/java/org/redkale/convert/ConvertColumn.java +++ b/src/main/java/org/redkale/convert/ConvertColumn.java @@ -5,11 +5,10 @@ */ package org.redkale.convert; +import java.lang.annotation.*; import static java.lang.annotation.ElementType.*; import static java.lang.annotation.RetentionPolicy.*; -import java.lang.annotation.*; - /** * 依附在setter、getter方法、字段进行简单的配置 * @@ -51,6 +50,15 @@ public @interface ConvertColumn { */ ConvertType type() default ConvertType.ALL; + /** + * 字段值转换器 + * + * @return ConvertColumnTransfer实现类 + * + * @since 2.8.0 + */ + Class tranfer() default ConvertColumnTransfer.class; + /** * ConvertColumn 的多用类 * diff --git a/src/main/java/org/redkale/convert/ConvertColumnTransfer.java b/src/main/java/org/redkale/convert/ConvertColumnTransfer.java new file mode 100644 index 000000000..7b7d70da5 --- /dev/null +++ b/src/main/java/org/redkale/convert/ConvertColumnTransfer.java @@ -0,0 +1,16 @@ +/* + +*/ + +package org.redkale.convert; + +import org.redkale.util.Attribute; + +/** + * + * @author zhangjx + * @param 字段类型 + */ +public interface ConvertColumnTransfer { + public A transfer(Object obj, Attribute attribute, F value); +} diff --git a/src/main/java/org/redkale/convert/EnMember.java b/src/main/java/org/redkale/convert/EnMember.java index 9f83f0fa2..1f1303095 100644 --- a/src/main/java/org/redkale/convert/EnMember.java +++ b/src/main/java/org/redkale/convert/EnMember.java @@ -106,6 +106,10 @@ public final class EnMember { return new EnMember<>(attribute, factory.loadEncoder(fieldtype), null, null); } + public F getFieldValue(T obj) { + return attribute.get(obj); + } + public final boolean accepts(String name) { return attribute.field().equals(name); } diff --git a/src/main/java/org/redkale/convert/Writer.java b/src/main/java/org/redkale/convert/Writer.java index 77760fc9c..b5167b1e4 100644 --- a/src/main/java/org/redkale/convert/Writer.java +++ b/src/main/java/org/redkale/convert/Writer.java @@ -141,7 +141,7 @@ public abstract class Writer { public void writeObjectField(final EnMember member, Object obj) { Object value; if (objFieldFunc == null) { - value = member.attribute.get(obj); + value = member.getFieldValue(obj); } else { value = objFieldFunc.apply(member.attribute, obj); } diff --git a/src/main/java/org/redkale/convert/proto/ProtobufWriter.java b/src/main/java/org/redkale/convert/proto/ProtobufWriter.java index 15e6a0b4d..281d62d38 100644 --- a/src/main/java/org/redkale/convert/proto/ProtobufWriter.java +++ b/src/main/java/org/redkale/convert/proto/ProtobufWriter.java @@ -414,7 +414,7 @@ public class ProtobufWriter extends Writer implements ByteTuple { public void writeObjectField(final EnMember member, Object obj) { Object value; if (objFieldFunc == null) { - value = member.getAttribute().get(obj); + value = member.getFieldValue(obj); } else { value = objFieldFunc.apply(member.getAttribute(), obj); }