This commit is contained in:
Redkale
2018-01-30 09:01:19 +08:00
parent 379a399d29
commit 3d0e4ee7d7
2 changed files with 13 additions and 10 deletions

View File

@@ -5,18 +5,21 @@
*/ */
package org.redkale.net.http; package org.redkale.net.http;
import org.redkale.convert.Convert;
import org.redkale.util.AnyValue; import org.redkale.util.AnyValue;
/** /**
* HTTP输出引擎的基类 <br> * HTTP输出引擎的基类 <br>
* HttpRender主要是给HttpResponse.finish(Object obj)提供指定数据类型的输出策略。 <br> * HttpRender主要是给HttpResponse.finish(Object obj)提供指定数据类型的输出策略。 <br>
* HttpResponse.finish(Object obj)内置对如下数据类型进行了特殊处理: <br> * <pre>
* CharSequence/String <br> * HttpResponse.finish(Object obj)内置对如下数据类型进行了特殊处理:
* byte[] <br> * CharSequence/String
* ByteBuffer <br> * byte[]
* ByteBuffer[] <br> * ByteBuffer
* File <br> * ByteBuffer[]
* HttpResult <br> * File
* HttpResult
* </pre>
* <p> * <p>
* 如果对其他数据类型有特殊输出的需求则需要自定义HttpRender。 * 如果对其他数据类型有特殊输出的需求则需要自定义HttpRender。
* <p> * <p>
@@ -30,7 +33,7 @@ public interface HttpRender<T> {
default void init(HttpContext context, AnyValue config) { default void init(HttpContext context, AnyValue config) {
} }
public <V extends T> void renderTo(HttpRequest request, HttpResponse response, V scope); public <V extends T> void renderTo(HttpRequest request, HttpResponse response, Convert convert, V scope);
public Class<T> getType(); public Class<T> getType();
} }

View File

@@ -480,14 +480,14 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
if (hasRender) { if (hasRender) {
if (onlyoneHttpRender != null) { if (onlyoneHttpRender != null) {
if (onlyoneHttpRender.getType().isAssignableFrom(obj.getClass())) { if (onlyoneHttpRender.getType().isAssignableFrom(obj.getClass())) {
onlyoneHttpRender.renderTo(this.request, this, obj); onlyoneHttpRender.renderTo(this.request, this, convert, obj);
return; return;
} }
} else { } else {
Class objt = obj.getClass(); Class objt = obj.getClass();
for (HttpRender render : this.renders) { for (HttpRender render : this.renders) {
if (render.getType().isAssignableFrom(objt)) { if (render.getType().isAssignableFrom(objt)) {
render.renderTo(this.request, this, obj); render.renderTo(this.request, this, convert, obj);
return; return;
} }
} }