From 1cbbf17392e6566e8e5ca208b3c24fcf8a97570f Mon Sep 17 00:00:00 2001 From: Redkale <8730487+redkale@users.noreply.github.com> Date: Thu, 24 Sep 2020 14:50:05 +0800 Subject: [PATCH] --- src/org/redkale/net/http/HttpRequest.java | 53 ++++++++++++++++++++--- src/org/redkale/net/http/Rest.java | 6 ++- 2 files changed, 51 insertions(+), 8 deletions(-) diff --git a/src/org/redkale/net/http/HttpRequest.java b/src/org/redkale/net/http/HttpRequest.java index 46097162e..3cb2303b5 100644 --- a/src/org/redkale/net/http/HttpRequest.java +++ b/src/org/redkale/net/http/HttpRequest.java @@ -41,6 +41,10 @@ public class HttpRequest extends Request { protected boolean rpc; + protected boolean frombody; + + protected Convert reqConvert; + protected Convert respConvert; @Comment("Method GET/POST/...") @@ -108,8 +112,14 @@ public class HttpRequest extends Request { if (req.getBody() != null) this.array.write(req.getBody()); if (req.getHeaders() != null) { this.headers.putAll(req.getHeaders()); - if (this.headers.containsKey(Rest.REST_HEADER_CONVERT_TYPE)) { - this.respConvert = ConvertFactory.findConvert(ConvertType.valueOf(this.headers.get(Rest.REST_HEADER_CONVERT_TYPE))); + if (this.headers.containsKey(Rest.REST_HEADER_PARAM_FROM_BODY)) { + this.frombody = "true".equals(this.headers.get(Rest.REST_HEADER_RESP_CONVERT_TYPE)); + } + if (this.headers.containsKey(Rest.REST_HEADER_RESP_CONVERT_TYPE)) { + this.respConvert = ConvertFactory.findConvert(ConvertType.valueOf(this.headers.get(Rest.REST_HEADER_RESP_CONVERT_TYPE))); + } + if (this.headers.containsKey(Rest.REST_HEADER_REQ_CONVERT_TYPE)) { + this.reqConvert = ConvertFactory.findConvert(ConvertType.valueOf(this.headers.get(Rest.REST_HEADER_REQ_CONVERT_TYPE))); } } if (req.getParams() != null) this.params.putAll(req.getParams()); @@ -251,7 +261,15 @@ public class HttpRequest extends Request { this.currentUserid = value; headers.put(name, value); break; - case Rest.REST_HEADER_CONVERT_TYPE: + case Rest.REST_HEADER_PARAM_FROM_BODY: + this.frombody = "true".equalsIgnoreCase(value); + headers.put(name, value); + break; + case Rest.REST_HEADER_REQ_CONVERT_TYPE: + reqConvert = ConvertFactory.findConvert(ConvertType.valueOf(value)); + headers.put(name, value); + break; + case Rest.REST_HEADER_RESP_CONVERT_TYPE: respConvert = ConvertFactory.findConvert(ConvertType.valueOf(value)); headers.put(name, value); break; @@ -561,9 +579,10 @@ public class HttpRequest extends Request { * @return 内容 */ public T getBodyJson(java.lang.reflect.Type type) { - String str = array.toString(StandardCharsets.UTF_8); - if (str == null || str.isEmpty()) return null; - return context.getJsonConvert().convertFrom(type, str); + if (array == null || array.isEmpty()) return null; + Convert convert = this.reqConvert; + if (convert == null) convert = context.getJsonConvert(); + return (T) convert.convertFrom(type, array.directBytes()); } /** @@ -576,7 +595,7 @@ public class HttpRequest extends Request { * @return 内容 */ public T getBodyJson(Convert convert, java.lang.reflect.Type type) { - if (array.size() < 1) return null; + if (array.isEmpty()) return null; return (T) convert.convertFrom(type, array.directBytes()); } @@ -665,6 +684,7 @@ public class HttpRequest extends Request { this.contentLength = -1; this.boundary = false; this.bodyparsed = false; + this.frombody = false; this.moduleid = 0; this.actionid = 0; this.annotations = null; @@ -673,6 +693,7 @@ public class HttpRequest extends Request { this.remoteAddr = null; this.attachment = null; + this.reqConvert = null; this.respConvert = jsonConvert; this.headers.clear(); @@ -1572,6 +1593,12 @@ public class HttpRequest extends Request { * @return 参数值 */ public String getParameter(String name) { + if (this.frombody) { + if (array.isEmpty()) return null; + Convert convert = this.reqConvert; + if (convert == null) convert = jsonConvert; + return (String) convert.convertFrom(String.class, array.directBytes()); + } parseBody(); return params.get(name); } @@ -1585,6 +1612,12 @@ public class HttpRequest extends Request { * @return 参数值 */ public String getParameter(String name, String defaultValue) { + if (this.frombody) { + if (array.isEmpty()) return defaultValue; + Convert convert = this.reqConvert; + if (convert == null) convert = jsonConvert; + return (String) convert.convertFrom(String.class, array.directBytes()); + } parseBody(); return params.getOrDefault(name, defaultValue); } @@ -1599,6 +1632,12 @@ public class HttpRequest extends Request { * @return 参数值 */ public T getJsonParameter(java.lang.reflect.Type type, String name) { + if (this.frombody) { + if (array.isEmpty()) return null; + Convert convert = this.reqConvert; + if (convert == null) convert = jsonConvert; + return (T) convert.convertFrom(type, array.directBytes()); + } String v = getParameter(name); return v == null || v.isEmpty() ? null : jsonConvert.convertFrom(type, v); } diff --git a/src/org/redkale/net/http/Rest.java b/src/org/redkale/net/http/Rest.java index 5d6a059ad..2e34e53a0 100644 --- a/src/org/redkale/net/http/Rest.java +++ b/src/org/redkale/net/http/Rest.java @@ -44,7 +44,11 @@ public final class Rest { public static final String REST_HEADER_CURRUSERID_NAME = "rest-curruserid-name"; - public static final String REST_HEADER_CONVERT_TYPE = "rest-convert-type"; + public static final String REST_HEADER_PARAM_FROM_BODY = "rest-paramfrombody"; + + public static final String REST_HEADER_REQ_CONVERT_TYPE = "rest-req-convert-type"; + + public static final String REST_HEADER_RESP_CONVERT_TYPE = "rest-resp-convert-type"; static final String REST_SERVICE_FIELD_NAME = "_redkale_service";