From de5ee844c46661a055e9432ec45895ad71601f71 Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Sat, 9 Sep 2017 22:36:35 +0800 Subject: [PATCH] =?UTF-8?q?Convert=20=E5=A2=9E=E5=8A=A0=20convertMapTo=20?= =?UTF-8?q?=E7=B3=BB=E5=88=97=E6=96=B9=E6=B3=95=EF=BC=8C=20HttpResponse?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20finishMapJson=20=E7=B3=BB=E5=88=97?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/org/redkale/convert/Convert.java | 3 ++ src/org/redkale/convert/bson/BsonConvert.java | 42 ++++++++++++++++++ src/org/redkale/convert/json/JsonConvert.java | 43 +++++++++++++++++++ src/org/redkale/net/http/HttpResponse.java | 25 +++++++++++ 4 files changed, 113 insertions(+) diff --git a/src/org/redkale/convert/Convert.java b/src/org/redkale/convert/Convert.java index c4caa83c0..4531d7a95 100644 --- a/src/org/redkale/convert/Convert.java +++ b/src/org/redkale/convert/Convert.java @@ -40,4 +40,7 @@ public abstract class Convert { public abstract ByteBuffer[] convertTo(final Supplier supplier, final Object value); public abstract ByteBuffer[] convertTo(final Supplier supplier, final Type type, final Object value); + + public abstract ByteBuffer[] convertMapTo(final Supplier supplier, final Object... values); + } diff --git a/src/org/redkale/convert/bson/BsonConvert.java b/src/org/redkale/convert/bson/BsonConvert.java index 3b3c0f4c2..141ff27f7 100644 --- a/src/org/redkale/convert/bson/BsonConvert.java +++ b/src/org/redkale/convert/bson/BsonConvert.java @@ -164,6 +164,15 @@ public final class BsonConvert extends Convert { return result; } + public byte[] convertMapTo(final Object... values) { + if (values == null) return null; + final BsonWriter out = writerPool.get().tiny(tiny); + ((AnyEncoder) factory.getAnyEncoder()).convertMapTo(out, values); + byte[] result = out.toArray(); + writerPool.offer(out); + return result; + } + public void convertTo(final OutputStream out, final Object value) { if (value == null) { new BsonStreamWriter(tiny, out).writeNull(); @@ -181,6 +190,14 @@ public final class BsonConvert extends Convert { } } + public void convertMapTo(final OutputStream out, final Object... values) { + if (values == null) { + new BsonStreamWriter(tiny, out).writeNull(); + } else { + ((AnyEncoder) factory.getAnyEncoder()).convertMapTo(new BsonStreamWriter(tiny, out), values); + } + } + @Override public ByteBuffer[] convertTo(final Supplier supplier, final Object value) { if (supplier == null) return null; @@ -205,6 +222,18 @@ public final class BsonConvert extends Convert { return out.toBuffers(); } + @Override + public ByteBuffer[] convertMapTo(final Supplier supplier, final Object... values) { + if (supplier == null) return null; + BsonByteBufferWriter out = new BsonByteBufferWriter(tiny, supplier); + if (values == null) { + out.writeNull(); + } else { + ((AnyEncoder) factory.getAnyEncoder()).convertMapTo(out, values); + } + return out.toBuffers(); + } + public void convertTo(final BsonWriter writer, final Object value) { if (value == null) { writer.writeNull(); @@ -218,6 +247,14 @@ public final class BsonConvert extends Convert { factory.loadEncoder(type).convertTo(writer, value); } + public void convertMapTo(final BsonWriter writer, final Object... values) { + if (values == null) { + writer.writeNull(); + } else { + ((AnyEncoder) factory.getAnyEncoder()).convertMapTo(writer, values); + } + } + public BsonWriter convertToWriter(final Object value) { if (value == null) return null; return convertToWriter(value.getClass(), value); @@ -230,4 +267,9 @@ public final class BsonConvert extends Convert { return out; } + public BsonWriter convertMapToWriter(final Object... values) { + final BsonWriter out = writerPool.get().tiny(tiny); + ((AnyEncoder) factory.getAnyEncoder()).convertMapTo(out, values); + return out; + } } diff --git a/src/org/redkale/convert/json/JsonConvert.java b/src/org/redkale/convert/json/JsonConvert.java index d577ede67..c2474a3d3 100644 --- a/src/org/redkale/convert/json/JsonConvert.java +++ b/src/org/redkale/convert/json/JsonConvert.java @@ -149,6 +149,15 @@ public final class JsonConvert extends Convert { return result; } + public String convertMapTo(final Object... values) { + if (values == null) return "null"; + final JsonWriter out = writerPool.get().tiny(tiny); + ((AnyEncoder) factory.getAnyEncoder()).convertMapTo(out, values); + String result = out.toString(); + writerPool.offer(out); + return result; + } + public void convertTo(final OutputStream out, final Object value) { if (value == null) { new JsonStreamWriter(tiny, out).writeNull(); @@ -166,6 +175,14 @@ public final class JsonConvert extends Convert { } } + public void convertMapTo(final OutputStream out, final Object... values) { + if (values == null) { + new JsonStreamWriter(tiny, out).writeNull(); + } else { + ((AnyEncoder) factory.getAnyEncoder()).convertMapTo(new JsonStreamWriter(tiny, out), values); + } + } + @Override public ByteBuffer[] convertTo(final Supplier supplier, final Object value) { if (supplier == null) return null; @@ -190,6 +207,18 @@ public final class JsonConvert extends Convert { return out.toBuffers(); } + @Override + public ByteBuffer[] convertMapTo(final Supplier supplier, final Object... values) { + if (supplier == null) return null; + JsonByteBufferWriter out = new JsonByteBufferWriter(tiny, null, supplier); + if (values == null) { + out.writeNull(); + } else { + ((AnyEncoder) factory.getAnyEncoder()).convertMapTo(out, values); + } + return out.toBuffers(); + } + public void convertTo(final JsonWriter writer, final Object value) { if (value == null) { writer.writeNull(); @@ -207,6 +236,14 @@ public final class JsonConvert extends Convert { } } + public void convertMapTo(final JsonWriter writer, final Object... values) { + if (values == null) { + writer.writeNull(); + } else { + ((AnyEncoder) factory.getAnyEncoder()).convertMapTo(writer, values); + } + } + public JsonWriter convertToWriter(final Object value) { if (value == null) return null; return convertToWriter(value.getClass(), value); @@ -218,4 +255,10 @@ public final class JsonConvert extends Convert { factory.loadEncoder(type).convertTo(out, value); return out; } + + public JsonWriter convertMapToWriter(final Object... values) { + final JsonWriter out = writerPool.get().tiny(tiny); + ((AnyEncoder) factory.getAnyEncoder()).convertMapTo(out, values); + return out; + } } diff --git a/src/org/redkale/net/http/HttpResponse.java b/src/org/redkale/net/http/HttpResponse.java index 057d60a61..a11e4605c 100644 --- a/src/org/redkale/net/http/HttpResponse.java +++ b/src/org/redkale/net/http/HttpResponse.java @@ -266,6 +266,18 @@ public class HttpResponse extends Response { finish(request.getJsonConvert().convertTo(context.getBufferSupplier(), obj)); } + /** + * 将对象数组用Map的形式以JSON格式输出
+ * 例如: finishMap("a",2,"b",3) 输出结果为 {"a":2,"b":3} + * + * @param objs 输出对象 + */ + public void finishMapJson(final Object... objs) { + this.contentType = "text/plain; charset=utf-8"; + if (this.recycleListener != null) this.output = objs; + finish(request.getJsonConvert().convertMapTo(context.getBufferSupplier(), objs)); + } + /** * 将对象以JSON格式输出 * @@ -278,6 +290,19 @@ public class HttpResponse extends Response { finish(convert.convertTo(context.getBufferSupplier(), obj)); } + /** + * 将对象数组用Map的形式以JSON格式输出
+ * 例如: finishMap("a",2,"b",3) 输出结果为 {"a":2,"b":3} + * + * @param convert 指定的JsonConvert + * @param objs 输出对象 + */ + public void finishMapJson(final JsonConvert convert, final Object... objs) { + this.contentType = "text/plain; charset=utf-8"; + if (this.recycleListener != null) this.output = objs; + finish(convert.convertMapTo(context.getBufferSupplier(), objs)); + } + /** * 将对象以JSON格式输出 *