diff --git a/src/org/redkale/convert/ConvertFactory.java b/src/org/redkale/convert/ConvertFactory.java index 9f83668b9..0784448db 100644 --- a/src/org/redkale/convert/ConvertFactory.java +++ b/src/org/redkale/convert/ConvertFactory.java @@ -91,6 +91,7 @@ public abstract class ConvertFactory { this.register(Number.class, NumberSimpledCoder.instance); this.register(String.class, StringSimpledCoder.instance); + this.register(StringConvertWrapper.class, StringConvertWrapperSimpledCoder.instance); this.register(CharSequence.class, CharSequenceSimpledCoder.instance); this.register(java.util.Date.class, DateSimpledCoder.instance); this.register(java.time.Duration.class, DurationSimpledCoder.instance); diff --git a/src/org/redkale/convert/StringConvertWrapper.java b/src/org/redkale/convert/StringConvertWrapper.java new file mode 100644 index 000000000..e703a00d1 --- /dev/null +++ b/src/org/redkale/convert/StringConvertWrapper.java @@ -0,0 +1,55 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.redkale.convert; + +/** + * 序列化去掉引号的String对象。 + *
+ * 场景: JavaBean  a = ... ;
+ *        Map map = new HashMap();
+ *        map.put("bean", a);
+ *        records.add(map);
+ *        records需要在后期序列化写入库。 但是在这期间a的内部字段值可能就变化了,会导致入库时并不是records.add的快照信息。
+ *        所以需要使用StringConvertWrapper:
+ *        Map map = new HashMap();
+ *        map.put("bean", new StringConvertWrapper(a.toString()));
+ *        records.add(map);
+ *        这样序列化写库时不需要在bean的值上面多一层引号。
+ * 
+ *

+ * 详情见: https://redkale.org + * + * @author zhangjx + */ +public class StringConvertWrapper { + + protected String value; + + public StringConvertWrapper() { + } + + public StringConvertWrapper(String value) { + this.value = value; + } + + public static StringConvertWrapper create(String value) { + return new StringConvertWrapper(value); + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + @Override + public String toString() { + return value; + } + +} diff --git a/src/org/redkale/convert/Writer.java b/src/org/redkale/convert/Writer.java index 7772f6942..ec35492ef 100644 --- a/src/org/redkale/convert/Writer.java +++ b/src/org/redkale/convert/Writer.java @@ -256,4 +256,11 @@ public abstract class Writer { * @param value String值 */ public abstract void writeString(String value); + + /** + * 写入一个StringConvertWrapper值 + * + * @param value StringConvertWrapper值 + */ + public abstract void writeWrapper(StringConvertWrapper value); } diff --git a/src/org/redkale/convert/bson/BsonWriter.java b/src/org/redkale/convert/bson/BsonWriter.java index 029dd5f21..218c51484 100644 --- a/src/org/redkale/convert/bson/BsonWriter.java +++ b/src/org/redkale/convert/bson/BsonWriter.java @@ -241,6 +241,11 @@ public class BsonWriter extends Writer { writeTo(bytes); } + @Override + public final void writeWrapper(StringConvertWrapper value) { + this.writeString(value == null ? null : value.getValue()); + } + @Override public final void writeNull() { writeShort(Reader.SIGN_NULL); diff --git a/src/org/redkale/convert/ext/StringConvertWrapperSimpledCoder.java b/src/org/redkale/convert/ext/StringConvertWrapperSimpledCoder.java new file mode 100644 index 000000000..975985b5f --- /dev/null +++ b/src/org/redkale/convert/ext/StringConvertWrapperSimpledCoder.java @@ -0,0 +1,34 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.redkale.convert.ext; + +import org.redkale.convert.*; + +/** + * String 的SimpledCoder实现 + * + *

+ * 详情见: https://redkale.org + * + * @author zhangjx + * @param Reader输入的子类型 + * @param Writer输出的子类型 + */ +public final class StringConvertWrapperSimpledCoder extends SimpledCoder { + + public static final StringConvertWrapperSimpledCoder instance = new StringConvertWrapperSimpledCoder(); + + @Override + public void convertTo(W out, StringConvertWrapper value) { + out.writeWrapper(value); + } + + @Override + public StringConvertWrapper convertFrom(R in) { + return new StringConvertWrapper(in.readString()); + } + +} diff --git a/src/org/redkale/convert/json/JsonWriter.java b/src/org/redkale/convert/json/JsonWriter.java index a5d675b0a..39c405c5c 100644 --- a/src/org/redkale/convert/json/JsonWriter.java +++ b/src/org/redkale/convert/json/JsonWriter.java @@ -319,6 +319,11 @@ public class JsonWriter extends Writer { writeTo(false, String.valueOf(value)); } + @Override + public final void writeWrapper(StringConvertWrapper value) { + writeTo(false, String.valueOf(value)); + } + @Override public final boolean needWriteClassName() { return false;