提交 10a1c5c1 编写于 作者: 浅梦2013's avatar 浅梦2013

http-api 不再强制依赖 `fastjson`

上级 c0bcdc53
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
## 发行版本 ## 发行版本
### v2.1.1 - 2023-04-08 ### v2.1.1 - 2023-04-08
- :sparkles: mica-mqtt-server http-api 不再强制依赖 `fastjson` 还支持 `Jackson``Fastjson2``Gson``hutool-json` 和自定义。
- :sparkles: mica-mqtt-codec 删除 `net.dreamlu.iot.mqtt.codec.ByteBufferUtil`,2.1.0 漏删。 - :sparkles: mica-mqtt-codec 删除 `net.dreamlu.iot.mqtt.codec.ByteBufferUtil`,2.1.0 漏删。
- :sparkles: mica-mqtt-codec 兼容 qos大于0,messageId == 0,做 qos 降级处理,`@那一刹的容颜` 反馈,详见 gitee #I6PFIH - :sparkles: mica-mqtt-codec 兼容 qos大于0,messageId == 0,做 qos 降级处理,`@那一刹的容颜` 反馈,详见 gitee #I6PFIH
- :sparkles: mica-mqtt-client 优化链接时的遗嘱消息构建,默认为 qos0。 - :sparkles: mica-mqtt-client 优化链接时的遗嘱消息构建,默认为 qos0。
......
...@@ -50,6 +50,8 @@ import org.tio.server.intf.TioServerHandler; ...@@ -50,6 +50,8 @@ import org.tio.server.intf.TioServerHandler;
import org.tio.server.intf.TioServerListener; import org.tio.server.intf.TioServerListener;
import org.tio.utils.Threads; import org.tio.utils.Threads;
import org.tio.utils.hutool.StrUtil; import org.tio.utils.hutool.StrUtil;
import org.tio.utils.json.JsonAdapter;
import org.tio.utils.json.JsonUtil;
import org.tio.utils.timer.DefaultTimerTaskService; import org.tio.utils.timer.DefaultTimerTaskService;
import org.tio.utils.timer.TimerTaskService; import org.tio.utils.timer.TimerTaskService;
...@@ -200,6 +202,10 @@ public class MqttServerCreator { ...@@ -200,6 +202,10 @@ public class MqttServerCreator {
* taskService * taskService
*/ */
private TimerTaskService taskService; private TimerTaskService taskService;
/**
* json 处理器
*/
private JsonAdapter jsonAdapter;
public String getName() { public String getName() {
return name; return name;
...@@ -527,6 +533,15 @@ public class MqttServerCreator { ...@@ -527,6 +533,15 @@ public class MqttServerCreator {
return this; return this;
} }
public JsonAdapter getJsonAdapter() {
return jsonAdapter;
}
public MqttServerCreator jsonAdapter(JsonAdapter jsonAdapter) {
this.jsonAdapter = JsonUtil.getJsonAdapter(jsonAdapter);
return this;
}
public MqttServer build() { public MqttServer build() {
// 默认的节点名称,用于集群 // 默认的节点名称,用于集群
if (StrUtil.isBlank(this.nodeName)) { if (StrUtil.isBlank(this.nodeName)) {
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
package net.dreamlu.iot.mqtt.core.server.http.api; package net.dreamlu.iot.mqtt.core.server.http.api;
import com.alibaba.fastjson.JSON;
import net.dreamlu.iot.mqtt.core.server.MqttServerCreator; import net.dreamlu.iot.mqtt.core.server.MqttServerCreator;
import net.dreamlu.iot.mqtt.core.server.dispatcher.IMqttMessageDispatcher; import net.dreamlu.iot.mqtt.core.server.dispatcher.IMqttMessageDispatcher;
import net.dreamlu.iot.mqtt.core.server.enums.MessageType; import net.dreamlu.iot.mqtt.core.server.enums.MessageType;
...@@ -31,13 +30,14 @@ import net.dreamlu.iot.mqtt.core.server.model.Subscribe; ...@@ -31,13 +30,14 @@ import net.dreamlu.iot.mqtt.core.server.model.Subscribe;
import net.dreamlu.iot.mqtt.core.server.session.IMqttSessionManager; import net.dreamlu.iot.mqtt.core.server.session.IMqttSessionManager;
import net.dreamlu.iot.mqtt.core.util.PayloadEncode; import net.dreamlu.iot.mqtt.core.util.PayloadEncode;
import net.dreamlu.iot.mqtt.core.util.TopicUtil; import net.dreamlu.iot.mqtt.core.util.TopicUtil;
import org.tio.http.common.HttpConst;
import org.tio.http.common.HttpRequest; import org.tio.http.common.HttpRequest;
import org.tio.http.common.HttpResponse; import org.tio.http.common.HttpResponse;
import org.tio.http.common.Method; import org.tio.http.common.Method;
import org.tio.utils.hutool.StrUtil; import org.tio.utils.hutool.StrUtil;
import org.tio.utils.json.JsonUtil;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.List; import java.util.List;
import java.util.function.Function; import java.util.function.Function;
...@@ -77,7 +77,7 @@ public class MqttHttpApi { ...@@ -77,7 +77,7 @@ public class MqttHttpApi {
*/ */
public HttpResponse publish(HttpRequest request) { public HttpResponse publish(HttpRequest request) {
PublishForm form = readForm(request, (requestBody) -> PublishForm form = readForm(request, (requestBody) ->
JSON.parseObject(requestBody, PublishForm.class) JsonUtil.readValue(requestBody, PublishForm.class)
); );
if (form == null) { if (form == null) {
return Result.fail(request, ResultCode.E101); return Result.fail(request, ResultCode.E101);
...@@ -100,10 +100,9 @@ public class MqttHttpApi { ...@@ -100,10 +100,9 @@ public class MqttHttpApi {
* @return HttpResponse * @return HttpResponse
*/ */
public HttpResponse publishBatch(HttpRequest request) { public HttpResponse publishBatch(HttpRequest request) {
List<PublishForm> formList = readForm(request, (requestBody) -> { List<PublishForm> formList = readForm(request, (requestBody) ->
String jsonBody = new String(requestBody, StandardCharsets.UTF_8); JsonUtil.readList(requestBody, PublishForm.class)
return JSON.parseArray(jsonBody, PublishForm.class); );
});
if (formList == null || formList.isEmpty()) { if (formList == null || formList.isEmpty()) {
return Result.fail(request, ResultCode.E101); return Result.fail(request, ResultCode.E101);
} }
...@@ -147,7 +146,7 @@ public class MqttHttpApi { ...@@ -147,7 +146,7 @@ public class MqttHttpApi {
*/ */
public HttpResponse subscribe(HttpRequest request) { public HttpResponse subscribe(HttpRequest request) {
SubscribeForm form = readForm(request, (requestBody) -> SubscribeForm form = readForm(request, (requestBody) ->
JSON.parseObject(requestBody, SubscribeForm.class) JsonUtil.readValue(requestBody, SubscribeForm.class)
); );
if (form == null) { if (form == null) {
return Result.fail(request, ResultCode.E101); return Result.fail(request, ResultCode.E101);
...@@ -175,10 +174,9 @@ public class MqttHttpApi { ...@@ -175,10 +174,9 @@ public class MqttHttpApi {
* @return HttpResponse * @return HttpResponse
*/ */
public HttpResponse subscribeBatch(HttpRequest request) { public HttpResponse subscribeBatch(HttpRequest request) {
List<SubscribeForm> formList = readForm(request, (requestBody) -> { List<SubscribeForm> formList = readForm(request, (requestBody) ->
String jsonBody = new String(requestBody, StandardCharsets.UTF_8); JsonUtil.readList(requestBody, SubscribeForm.class)
return JSON.parseArray(jsonBody, SubscribeForm.class); );
});
if (formList == null || formList.isEmpty()) { if (formList == null || formList.isEmpty()) {
return Result.fail(request, ResultCode.E101); return Result.fail(request, ResultCode.E101);
} }
...@@ -212,7 +210,7 @@ public class MqttHttpApi { ...@@ -212,7 +210,7 @@ public class MqttHttpApi {
*/ */
public HttpResponse unsubscribe(HttpRequest request) { public HttpResponse unsubscribe(HttpRequest request) {
BaseForm form = readForm(request, (requestBody) -> BaseForm form = readForm(request, (requestBody) ->
JSON.parseObject(requestBody, BaseForm.class) JsonUtil.readValue(requestBody, BaseForm.class)
); );
if (form == null) { if (form == null) {
return Result.fail(request, ResultCode.E101); return Result.fail(request, ResultCode.E101);
...@@ -236,10 +234,9 @@ public class MqttHttpApi { ...@@ -236,10 +234,9 @@ public class MqttHttpApi {
* @return HttpResponse * @return HttpResponse
*/ */
public HttpResponse unsubscribeBatch(HttpRequest request) { public HttpResponse unsubscribeBatch(HttpRequest request) {
List<BaseForm> formList = readForm(request, (requestBody) -> { List<BaseForm> formList = readForm(request, (requestBody) ->
String jsonBody = new String(requestBody, StandardCharsets.UTF_8); JsonUtil.readList(requestBody, BaseForm.class)
return JSON.parseArray(jsonBody, BaseForm.class); );
});
if (formList == null || formList.isEmpty()) { if (formList == null || formList.isEmpty()) {
return Result.fail(request, ResultCode.E101); return Result.fail(request, ResultCode.E101);
} }
...@@ -317,12 +314,12 @@ public class MqttHttpApi { ...@@ -317,12 +314,12 @@ public class MqttHttpApi {
* @param <T> 泛型 * @param <T> 泛型
* @return 表单 * @return 表单
*/ */
private static <T> T readForm(HttpRequest request, Function<byte[], T> function) { private static <T> T readForm(HttpRequest request, Function<String, T> function) {
byte[] requestBody = request.getBody(); byte[] requestBody = request.getBody();
if (requestBody == null) { if (requestBody == null) {
return null; return null;
} }
return function.apply(requestBody); return function.apply(new String(requestBody, HttpConst.CHARSET));
} }
/** /**
......
...@@ -16,15 +16,12 @@ ...@@ -16,15 +16,12 @@
package net.dreamlu.iot.mqtt.core.server.http.api.result; package net.dreamlu.iot.mqtt.core.server.http.api.result;
import com.alibaba.fastjson.JSONObject;
import net.dreamlu.iot.mqtt.core.server.http.api.code.ResultCode; import net.dreamlu.iot.mqtt.core.server.http.api.code.ResultCode;
import org.tio.http.common.HeaderName; import org.tio.http.common.*;
import org.tio.http.common.HeaderValue; import org.tio.utils.json.JsonUtil;
import org.tio.http.common.HttpRequest;
import org.tio.http.common.HttpResponse;
import java.nio.charset.Charset; import java.util.HashMap;
import java.nio.charset.StandardCharsets; import java.util.Map;
/** /**
* api Result * api Result
...@@ -32,7 +29,6 @@ import java.nio.charset.StandardCharsets; ...@@ -32,7 +29,6 @@ import java.nio.charset.StandardCharsets;
* @author L.cm * @author L.cm
*/ */
public final class Result { public final class Result {
private static final Charset UTF_8 = StandardCharsets.UTF_8;
/** /**
* 响应成功 * 响应成功
...@@ -51,7 +47,7 @@ public final class Result { ...@@ -51,7 +47,7 @@ public final class Result {
*/ */
public static HttpResponse ok(HttpResponse response) { public static HttpResponse ok(HttpResponse response) {
ResultCode resultCode = ResultCode.SUCCESS; ResultCode resultCode = ResultCode.SUCCESS;
JSONObject json = new JSONObject(); Map<String, Object> json = new HashMap<>(2);
json.put("code", resultCode.getResultCode()); json.put("code", resultCode.getResultCode());
return result(response, resultCode, json); return result(response, resultCode, json);
} }
...@@ -86,7 +82,7 @@ public final class Result { ...@@ -86,7 +82,7 @@ public final class Result {
*/ */
public static HttpResponse ok(HttpResponse response, Object data) { public static HttpResponse ok(HttpResponse response, Object data) {
ResultCode resultCode = ResultCode.SUCCESS; ResultCode resultCode = ResultCode.SUCCESS;
JSONObject json = new JSONObject(); Map<String, Object> json = new HashMap<>(4);
json.put("code", resultCode.getResultCode()); json.put("code", resultCode.getResultCode());
json.put("data", data); json.put("data", data);
return result(response, resultCode, json); return result(response, resultCode, json);
...@@ -121,16 +117,16 @@ public final class Result { ...@@ -121,16 +117,16 @@ public final class Result {
* @return HttpResponse * @return HttpResponse
*/ */
public static HttpResponse fail(HttpResponse response, ResultCode resultCode) { public static HttpResponse fail(HttpResponse response, ResultCode resultCode) {
JSONObject json = new JSONObject(); Map<String, Object> json = new HashMap<>(2);
json.put("code", resultCode.getResultCode()); json.put("code", resultCode.getResultCode());
return result(response, resultCode, json); return result(response, resultCode, json);
} }
private static HttpResponse result(HttpResponse response, ResultCode resultCode, JSONObject json) { private static HttpResponse result(HttpResponse response, ResultCode resultCode, Object value) {
response.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON); response.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON);
response.setStatus(resultCode.getStatusCode()); response.setStatus(resultCode.getStatusCode());
response.setBody(json.toJSONString().getBytes(UTF_8)); response.setBody(JsonUtil.toJsonString(value).getBytes(HttpConst.CHARSET));
response.setCharset(UTF_8); response.setCharset(HttpConst.CHARSET);
return response; return response;
} }
......
...@@ -206,6 +206,7 @@ import org.tio.http.common.handler.HttpRequestHandler; ...@@ -206,6 +206,7 @@ import org.tio.http.common.handler.HttpRequestHandler;
import org.tio.server.TioServer; import org.tio.server.TioServer;
import org.tio.server.TioServerConfig; import org.tio.server.TioServerConfig;
import org.tio.server.intf.TioServerListener; import org.tio.server.intf.TioServerListener;
import org.tio.utils.json.JsonUtil;
import org.tio.utils.thread.pool.SynThreadPoolExecutor; import org.tio.utils.thread.pool.SynThreadPoolExecutor;
import org.tio.websocket.server.handler.IWsMsgHandler; import org.tio.websocket.server.handler.IWsMsgHandler;
...@@ -284,10 +285,12 @@ public class MqttWebServer { ...@@ -284,10 +285,12 @@ public class MqttWebServer {
public static MqttWebServer config(MqttServerCreator serverCreator, TioServerConfig mqttServerConfig) { public static MqttWebServer config(MqttServerCreator serverCreator, TioServerConfig mqttServerConfig) {
// 1. 判断是否开启 http // 1. 判断是否开启 http
if (serverCreator.isHttpEnable()) { if (serverCreator.isHttpEnable()) {
// 1.1 http 路由配置 // 1.1 http-api 用到 json
serverCreator.jsonAdapter(JsonUtil.getJsonAdapter(serverCreator.getJsonAdapter()));
// 1.2 http 路由配置
MqttHttpApi httpApi = new MqttHttpApi(serverCreator); MqttHttpApi httpApi = new MqttHttpApi(serverCreator);
httpApi.register(); httpApi.register();
// 1.2 认证配置 // 1.3 认证配置
String username = serverCreator.getHttpBasicUsername(); String username = serverCreator.getHttpBasicUsername();
String password = serverCreator.getHttpBasicPassword(); String password = serverCreator.getHttpBasicPassword();
if (Objects.nonNull(username) && Objects.nonNull(password)) { if (Objects.nonNull(username) && Objects.nonNull(password)) {
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven-flatten.version>1.2.2</maven-flatten.version> <maven-flatten.version>1.2.2</maven-flatten.version>
<!-- mica-net version --> <!-- mica-net version -->
<mica-net.version>0.0.8</mica-net.version> <mica-net.version>0.0.9-SNAPSHOT</mica-net.version>
<mica.version>2.7.9</mica.version> <mica.version>2.7.9</mica.version>
<mica.auto.version>2.3.2</mica.auto.version> <mica.auto.version>2.3.2</mica.auto.version>
<spring.boot.version>2.7.9</spring.boot.version> <spring.boot.version>2.7.9</spring.boot.version>
......
...@@ -22,10 +22,6 @@ ...@@ -22,10 +22,6 @@
<groupId>net.dreamlu</groupId> <groupId>net.dreamlu</groupId>
<artifactId>mica-net-http</artifactId> <artifactId>mica-net-http</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency> <dependency>
<groupId>com.jfinal</groupId> <groupId>com.jfinal</groupId>
<artifactId>jfinal</artifactId> <artifactId>jfinal</artifactId>
......
...@@ -22,10 +22,6 @@ ...@@ -22,10 +22,6 @@
<groupId>net.dreamlu</groupId> <groupId>net.dreamlu</groupId>
<artifactId>mica-net-http</artifactId> <artifactId>mica-net-http</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId> <artifactId>spring-boot-autoconfigure</artifactId>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册