diff --git a/src/org/redkale/net/http/HttpResponse.java b/src/org/redkale/net/http/HttpResponse.java index 1f85089af..7f6dcd458 100644 --- a/src/org/redkale/net/http/HttpResponse.java +++ b/src/org/redkale/net/http/HttpResponse.java @@ -123,6 +123,8 @@ public class HttpResponse extends Response { private BiFunction bufferHandler; + private BiFunction retResultHandler; + private Supplier bodyBufferSupplier; //------------------------------------------------ @@ -203,6 +205,7 @@ public class HttpResponse extends Response { this.headLenPos = -1; this.header.clear(); this.bufferHandler = null; + this.retResultHandler = null; return super.recycle(); } @@ -393,8 +396,11 @@ public class HttpResponse extends Response { * * @param ret RetResult输出对象 */ - public void finishJson(final org.redkale.service.RetResult ret) { + public void finishJson(org.redkale.service.RetResult ret) { this.contentType = this.jsonContentType; + if (this.retResultHandler != null) { + ret = this.retResultHandler.apply(this, ret); + } if (this.recycleListener != null) this.output = ret; if (ret != null && !ret.isSuccess()) { this.header.addValue("retcode", String.valueOf(ret.getRetcode())); @@ -411,8 +417,11 @@ public class HttpResponse extends Response { * @param convert 指定的JsonConvert * @param ret RetResult输出对象 */ - public void finishJson(final JsonConvert convert, final org.redkale.service.RetResult ret) { + public void finishJson(final JsonConvert convert, org.redkale.service.RetResult ret) { this.contentType = this.jsonContentType; + if (this.retResultHandler != null) { + ret = this.retResultHandler.apply(this, ret); + } if (this.recycleListener != null) this.output = ret; if (ret != null && !ret.isSuccess()) { this.header.addValue("retcode", String.valueOf(ret.getRetcode())); @@ -482,7 +491,7 @@ public class HttpResponse extends Response { * @param obj 输出对象 */ @SuppressWarnings("unchecked") - public void finish(final Convert convert, final Type type, final Object obj) { + public void finish(final Convert convert, final Type type, Object obj) { if (obj == null) { finish("null"); } else if (obj instanceof CompletableFuture) { @@ -549,6 +558,10 @@ public class HttpResponse extends Response { if (this.recycleListener != null) this.output = obj; if (obj instanceof org.redkale.service.RetResult) { org.redkale.service.RetResult ret = (org.redkale.service.RetResult) obj; + if (this.retResultHandler != null) { + ret = this.retResultHandler.apply(this, ret); + obj = ret; + } if (!ret.isSuccess()) { this.header.addValue("retcode", String.valueOf(ret.getRetcode())).addValue("retinfo", ret.getRetinfo()); } @@ -1161,6 +1174,24 @@ public class HttpResponse extends Response { this.bufferHandler = bufferHandler; } + /** + * 获取输出RetResult时的拦截器 + * + * @return 拦截器 + */ + protected BiFunction getRetResultHandler() { + return retResultHandler; + } + + /** + * 设置输出RetResult时的拦截器 + * + * @param retResultHandler 拦截器 + */ + protected void setRetResultHandler(BiFunction retResultHandler) { + this.retResultHandler = retResultHandler; + } + protected final class TransferFileHandler implements CompletionHandler { private final File file;