diff --git a/src/org/redkale/convert/Convert.java b/src/org/redkale/convert/Convert.java index a81d43010..32e2240ae 100644 --- a/src/org/redkale/convert/Convert.java +++ b/src/org/redkale/convert/Convert.java @@ -54,6 +54,10 @@ public abstract class Convert { public abstract T convertFrom(final Type type, final ConvertMask mask, final ByteBuffer... buffers); + public abstract byte[] convertToBytes(final Object value); + + public abstract byte[] convertToBytes(final Type type, final Object value); + public abstract ByteBuffer[] convertTo(final Supplier supplier, final Object value); public abstract ByteBuffer[] convertTo(final Supplier supplier, final Type type, final Object value); diff --git a/src/org/redkale/convert/bson/BsonConvert.java b/src/org/redkale/convert/bson/BsonConvert.java index 7d51de6c7..0bd2ba225 100644 --- a/src/org/redkale/convert/bson/BsonConvert.java +++ b/src/org/redkale/convert/bson/BsonConvert.java @@ -177,6 +177,16 @@ public class BsonConvert extends BinaryConvert { return result; } + @Override + public byte[] convertToBytes(final Object value) { + return convertTo(value); + } + + @Override + public byte[] convertToBytes(final Type type, final Object value) { + return convertTo(type, value); + } + @Override public byte[] convertMapTo(final Object... values) { if (values == null) return null; diff --git a/src/org/redkale/convert/json/JsonConvert.java b/src/org/redkale/convert/json/JsonConvert.java index 0c922ee1e..726160fdf 100644 --- a/src/org/redkale/convert/json/JsonConvert.java +++ b/src/org/redkale/convert/json/JsonConvert.java @@ -214,6 +214,25 @@ public class JsonConvert extends TextConvert { return result; } + @Override + public byte[] convertToBytes(final Object value) { + if (value == null) return null; + String result = convertTo(value.getClass(), value); + return result == null ? null : result.getBytes(StandardCharsets.UTF_8); + } + + @Override + public byte[] convertToBytes(final Type type, final Object value) { + if (type == null) return null; + if (value == null) return null; + final JsonWriter writer = pollJsonWriter(); + writer.specify(type); + factory.loadEncoder(type).convertTo(writer, value); + String result = writer.toString(); + writerPool.accept(writer); + return result == null ? null : result.getBytes(StandardCharsets.UTF_8); + } + @Override public String convertMapTo(final Object... values) { if (values == null) return "null"; diff --git a/src/org/redkale/mq/MessageRecord.java b/src/org/redkale/mq/MessageRecord.java index adc295443..d9b4e066b 100644 --- a/src/org/redkale/mq/MessageRecord.java +++ b/src/org/redkale/mq/MessageRecord.java @@ -7,7 +7,7 @@ package org.redkale.mq; import java.io.Serializable; import java.nio.charset.StandardCharsets; -import org.redkale.convert.ConvertDisabled; +import org.redkale.convert.*; import org.redkale.convert.json.JsonConvert; import org.redkale.util.Comment; @@ -45,6 +45,10 @@ public class MessageRecord implements Serializable { public MessageRecord() { } + public MessageRecord(String resptopic, Convert convert, Object bean) { + this(System.nanoTime(), 0, 0, null, null, resptopic, convert.convertToBytes(bean)); + } + public MessageRecord(String resptopic, byte[] content) { this(System.nanoTime(), 0, 0, null, null, resptopic, content); }