From 75d79fd4aab245ad049f3d58db2185d686418466 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=85=E6=A2=A6?= <1101766085@qq.com> Date: Tue, 26 Apr 2022 12:46:07 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E7=BB=9F=E4=B8=80=E5=93=8D?= =?UTF-8?q?=E5=BA=94=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/server/http/api/code/ResultCode.java | 5 ++- .../http/handler/MqttHttpRequestHandler.java | 17 +++------- .../server/http/handler/MqttHttpRoutes.java | 20 ++++------- .../{HandlerInfo.java => RouteInfo.java} | 33 +++++++++---------- 4 files changed, 31 insertions(+), 44 deletions(-) rename mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/http/handler/{HandlerInfo.java => RouteInfo.java} (69%) diff --git a/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/http/api/code/ResultCode.java b/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/http/api/code/ResultCode.java index a04bc55..542d695 100644 --- a/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/http/api/code/ResultCode.java +++ b/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/http/api/code/ResultCode.java @@ -48,7 +48,10 @@ public enum ResultCode { * 未知错误 */ E105(HttpResponseStatus.C500, 105), - + /** + * 请求方法错误 + */ + E404(HttpResponseStatus.C404, 404), ; private final HttpResponseStatus statusCode; diff --git a/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/http/handler/MqttHttpRequestHandler.java b/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/http/handler/MqttHttpRequestHandler.java index a24643e..68ee52b 100644 --- a/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/http/handler/MqttHttpRequestHandler.java +++ b/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/http/handler/MqttHttpRequestHandler.java @@ -48,19 +48,15 @@ public class MqttHttpRequestHandler implements HttpRequestHandler { return resp500(request, requestLine, e); } // 2. 路由处理 - HandlerInfo handler = MqttHttpRoutes.getHandler(requestLine); + HttpHandler handler = MqttHttpRoutes.getHandler(requestLine); if (handler == null) { return resp404(request, requestLine); } - Method method = requestLine.getMethod(); - if (handler.getMethod() != method) { - return Result.fail(new HttpResponse(request), ResultCode.E104); - } if (logger.isInfoEnabled()) { - logger.info("mqtt http api {} path:{}", method.name(), requestLine.getPathAndQuery()); + logger.info("mqtt http api {} path:{}", requestLine.method, requestLine.getPathAndQuery()); } try { - return handler.getHandler().apply(request); + return handler.apply(request); } catch (Exception e) { return resp500(request, requestLine, e); } @@ -71,9 +67,7 @@ public class MqttHttpRequestHandler implements HttpRequestHandler { if (logger.isErrorEnabled()) { logger.error("mqtt http {} path:{} 404", requestLine.getMethod().name(), requestLine.getPathAndQuery()); } - HttpResponse response = new HttpResponse(request); - response.setStatus(HttpResponseStatus.C404); - return response; + return Result.fail(request, ResultCode.E404); } @Override @@ -81,8 +75,7 @@ public class MqttHttpRequestHandler implements HttpRequestHandler { if (logger.isErrorEnabled()) { logger.error("mqtt http {} path:{} error", requestLine.getMethod().name(), requestLine.getPathAndQuery(), throwable); } - HttpResponse response = new HttpResponse(request); - return Result.fail(response, ResultCode.E105); + return Result.fail(request, ResultCode.E105); } @Override diff --git a/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/http/handler/MqttHttpRoutes.java b/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/http/handler/MqttHttpRoutes.java index 223c480..c720e99 100644 --- a/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/http/handler/MqttHttpRoutes.java +++ b/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/http/handler/MqttHttpRoutes.java @@ -28,7 +28,7 @@ import java.util.*; */ public final class MqttHttpRoutes { private static final LinkedList FILTERS = new LinkedList<>(); - private static final Map ROUTS = new HashMap<>(); + private static final Map ROUTS = new HashMap<>(); /** * 注册 filter 到 first @@ -75,17 +75,7 @@ public final class MqttHttpRoutes { * @param handler HttpHandler */ public static void register(Method method, String path, HttpHandler handler) { - ROUTS.put(path, new HandlerInfo(method, handler)); - } - - /** - * 读取路由 - * - * @param path 路径 - * @return HandlerInfo - */ - public static HandlerInfo getHandler(String path) { - return ROUTS.get(path); + ROUTS.put(new RouteInfo(path, method), handler); } /** @@ -94,8 +84,10 @@ public final class MqttHttpRoutes { * @param requestLine RequestLine * @return HttpHandler */ - public static HandlerInfo getHandler(RequestLine requestLine) { - return getHandler(requestLine.getPath()); + public static HttpHandler getHandler(RequestLine requestLine) { + String path = requestLine.getPath(); + Method method = requestLine.getMethod(); + return ROUTS.get(new RouteInfo(path, method)); } } diff --git a/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/http/handler/HandlerInfo.java b/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/http/handler/RouteInfo.java similarity index 69% rename from mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/http/handler/HandlerInfo.java rename to mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/http/handler/RouteInfo.java index b514922..c6ad2f4 100644 --- a/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/http/handler/HandlerInfo.java +++ b/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/http/handler/RouteInfo.java @@ -25,21 +25,13 @@ import java.util.Objects; * * @author L.cm */ -public class HandlerInfo { +public class RouteInfo { + private final String path; private final Method method; - private final HttpHandler handler; - public HandlerInfo(Method method, HttpHandler handler) { + public RouteInfo(String path, Method method) { + this.path = path; this.method = method; - this.handler = handler; - } - - public Method getMethod() { - return method; - } - - public HttpHandler getHandler() { - return handler; } @Override @@ -47,16 +39,23 @@ public class HandlerInfo { if (this == o) { return true; } - if (!(o instanceof HandlerInfo)) { + if (o == null || getClass() != o.getClass()) { return false; } - HandlerInfo that = (HandlerInfo) o; - return method == that.method && - Objects.equals(handler, that.handler); + RouteInfo that = (RouteInfo) o; + return Objects.equals(path, that.path) && method == that.method; } @Override public int hashCode() { - return Objects.hash(method, handler); + return Objects.hash(path, method); + } + + @Override + public String toString() { + return "HandlerInfo{" + + "path='" + path + '\'' + + ", method=" + method + + '}'; } } -- GitLab