/*
* +----------------------------------------------------------------------
* | Copyright (c) 奇特物联 2021-2022 All rights reserved.
* +----------------------------------------------------------------------
* | Licensed 未经许可不能去掉「奇特物联」相关版权
* +----------------------------------------------------------------------
* | Author: xw2sy@163.com
* +----------------------------------------------------------------------
*/
package cc.iotkit.utils;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest;
import cc.iotkit.common.utils.JsonUtil;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
/**
* Map< String, Object> 是最常用的一种Map类型,但是它写着麻烦
* <p>所以特封装此类,继承Map,进行一些扩展,可以让Map更灵活使用
* <p>最新:2020-12-10 新增部分构造方法
*
* @author kong
*/
public class SoMap extends LinkedHashMap<String, Object> {
private static final long serialVersionUID = 1L;
public SoMap() {
}
/**
* 以下元素会在isNull函数中被判定为Null,
*/
public static final Object[] NULL_ELEMENT_ARRAY = {null, ""};
public static final List<Object> NULL_ELEMENT_LIST;
static {
NULL_ELEMENT_LIST = Arrays.asList(NULL_ELEMENT_ARRAY);
}
// ============================= 读值 =============================
/**
* 获取一个值
*/
@Override
public Object get(Object key) {
if ("this".equals(key)) {
return this;
}
return super.get(key);
}
/**
* 如果为空,则返回默认值
*/
public Object get(Object key, Object defaultValue) {
Object value = get(key);
if (valueIsNull(value)) {
return defaultValue;
}
return value;
}
/**
* 转为String并返回
*/
public String getString(String key) {
Object value = get(key);
if (value == null) {
return null;
}
return String.valueOf(value);
}
/**
* 如果为空,则返回默认值
*/
public String getString(String key, String defaultValue) {
Object value = get(key);
if (valueIsNull(value)) {
return defaultValue;
}
return String.valueOf(value);
}
/**
* 转为int并返回
*/
public int getInt(String key) {
Object value = get(key);
if (valueIsNull(value)) {
return 0;
}
return Integer.parseInt(String.valueOf(value));
}
/**
* 转为int并返回,同时指定默认值
*/
public int getInt(String key, int defaultValue) {
Object value = get(key);
if (valueIsNull(value)) {
return defaultValue;
}
return Integer.parseInt(String.valueOf(value));
}
/**
* 转为long并返回
*/
public long getLong(String key) {
Object value = get(key);
if (valueIsNull(value)) {
return 0;
}
return Long.parseLong(String.valueOf(value));
}
/**
* 转为double并返回
*/
public double getDouble(String key) {
Object value = get(key);
if (valueIsNull(value)) {
return 0.0;
}
return Double.parseDouble(String.valueOf(value));
}
/**
* 转为boolean并返回
*/
public boolean getBoolean(String key) {
Object value = get(key);
if (valueIsNull(value)) {
return false;
}
return Boolean.parseBoolean(String.valueOf(value));
}
/**
* 转为Date并返回,根据自定义格式
*/
public Date getDateByFormat(String key, String format) {
try {
return new SimpleDateFormat(format).parse(getString(key));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 转为Date并返回,根据格式: yyyy-MM-dd
*/
public Date getDate(String key) {
return getDateByFormat(key, "yyyy-MM-dd");
}
/**
* 转为Date并返回,根据格式: yyyy-MM-dd HH:mm:ss
*/
public Date getDateTime(String key) {
return getDateByFormat(key, "yyyy-MM-dd HH:mm:ss");
}
/**
* 转为Map并返回
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public SoMap getMap(String key) {
Object value = get(key);
if (value == null) {
return SoMap.getSoMap();
}
if (value instanceof Map) {
return SoMap.getSoMap((Map) value);
}
if (value instanceof String) {
return SoMap.getSoMap().setJsonString((String) value);
}
throw new RuntimeException("值无法转化为SoMap: " + value);
}
/**
* 获取集合(必须原先就是个集合,否则会创建个新集合并返回)
*/
@SuppressWarnings("unchecked")
public List<Object> getList(String key) {
Object value = get(key);
List<Object> list;
if (value == null || value.equals("")) {
list = new ArrayList<>();
} else if (value instanceof List) {
list = (List<Object>) value;
} else {
list = new ArrayList<>();
list.add(value);
}
return list;
}
/**
* 获取集合 (指定泛型类型)
*/
public <T> List<T> getList(String key, Class<T> cs) {
List<Object> list = getList(key);
List<T> list2 = new ArrayList<T>();
for (Object obj : list) {
T objC = getValueByClass(obj, cs);
list2.add(objC);
}
return list2;
}
/**
* 获取集合(逗号分隔式),(指定类型)
*/
public <T> List<T> getListByComma(String key, Class<T> cs) {
String listStr = getString(key);
if (listStr == null || listStr.equals("")) {
return new ArrayList<>();
}
// 开始转化
String[] arr = listStr.split(",");
List<T> list = new ArrayList<T>();
for (String str : arr) {
if (cs == int.class || cs == Integer.class || cs == long.class || cs == Long.class) {
str = str.trim();
}
T objC = getValueByClass(str, cs);
list.add(objC);
}
return list;
}
/**
* 根据指定类型从map中取值,返回实体对象
*/
public <T> T getModel(Class<T> cs) {
try {
return getModelByObject(cs.newInstance());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 从map中取值,塞到一个对象中
*/
public <T> T getModelByObject(T obj) {
// 获取类型
Class<?> cs = obj.getClass();
// 循环复制
for (Field field : cs.getDeclaredFields()) {
try {
// 获取对象
Object value = this.get(field.getName());
if (value == null) {
continue;
}
field.setAccessible(true);
Object valueConvert = getValueByClass(value, field.getType());
field.set(obj, valueConvert);
} catch (IllegalArgumentException | IllegalAccessException e) {
throw new RuntimeException("属性取值出错:" + field.getName(), e);
}
}
return obj;
}
/**
* 将指定值转化为指定类型并返回
*
* @param obj
* @param cs
* @param
没有合适的资源?快使用搜索试试~ 我知道了~
一个开源的物联网基础开发平台,提供了物联网及相关业务开发的常见基础功能, 能帮助你快速搭建自己的物联网相关业务平台
共606个文件
java:450个
xml:43个
js:22个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 113 浏览量
2024-04-22
16:37:51
上传
评论
收藏 15.1MB ZIP 举报
温馨提示
一个开源的物联网基础开发平台,提供了物联网及相关业务开发的常见基础功能, 能帮助你快速搭建自己的物联网相关业务平台。系统包含了品类、物模型、消息转换、通讯组件(mqtt/EMQX通讯组件、小度音箱接入组件、onenet Studio接入组件)、modbus透传接入、modbus虚拟网关、云端低代码设备开发、设备管理、设备分组、规则引擎、第三方平台接入、数据流转(http/mqtt/kafka)、数据可视化、报警中心等模块和智能家居APP(小程序)。
资源推荐
资源详情
资源评论
收起资源包目录
一个开源的物联网基础开发平台,提供了物联网及相关业务开发的常见基础功能, 能帮助你快速搭建自己的物联网相关业务平台 (606个子文件)
start.bat 1KB
DLT645-1997.csv 7KB
Dockerfile 294B
.DS_Store 18KB
.DS_Store 10KB
.DS_Store 8KB
.DS_Store 8KB
.DS_Store 8KB
.DS_Store 8KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
spring.factories 109B
spring.factories 108B
.gitignore 325B
confirm.html 5KB
login.html 5KB
iot-emqx-component-0.4.3-SNAPSHOT.jar 4.74MB
iot-DLT645-component-0.4.3-SNAPSHOT.jar 2.27MB
iot-http-biz-component-0.4.3-SNAPSHOT.jar 2.24MB
iot-http-biz-component-0.4.3-SNAPSHOT.jar 2.24MB
iot-mqtt-component-0.4.3-SNAPSHOT.jar 1.96MB
iot-websocket-component-0.4.3-SNAPSHOT.jar 1.41MB
ag-sdk-biz-84356.tar.gz-20220603.182201-SNAPSHOT.jar 264KB
ctg-ag-sdk-core-2.5.0-20220512.061430-51.jar 56KB
SoMap.java 22KB
DeviceInfoDataImpl.java 17KB
DeviceController.java 16KB
HexUtil.java 15KB
ContainerUtils.java 15KB
ProtocolController.java 13KB
SpaceDeviceController.java 12KB
DLT645DataFormat.java 11KB
DeviceComponentManager.java 10KB
DeviceBehaviourService.java 10KB
VirtualManager.java 10KB
EmqxDeviceComponent.java 10KB
MqttVerticle.java 9KB
DeviceInfoDataCache.java 9KB
TcpServerVerticle.java 9KB
RuleEngineController.java 9KB
DLT645Analysis.java 8KB
DeviceMessageHandler.java 8KB
TaskManager.java 8KB
DbStructureDataImpl.java 8KB
ApiTool.java 8KB
DbStructureDataImpl.java 8KB
DLT645Verticle.java 7KB
CtwingDeviceComponent.java 7KB
WebSocketServerVerticle.java 7KB
ProductController.java 7KB
DeviceService.java 7KB
RuleManager.java 7KB
TokenRequestHandler.java 6KB
HttpBizComponent.java 6KB
ExampleDataInit.java 6KB
DeferredDataConsumer.java 6KB
UserInfoController.java 6KB
VertxTcpServer.java 6KB
ThingModelMessageDataImpl.java 6KB
Gateway.java 6KB
MqttDeviceComponent.java 5KB
LuaScripter.java 5KB
LuaScripter.java 5KB
VirtualDeviceController.java 5KB
VertxTcpClient.java 5KB
TcpClientVerticle.java 5KB
ThingModelMessageDataImpl.java 5KB
TableManager.java 5KB
Constants.java 5KB
DeviceInfoPropertyDataCache.java 5KB
ThingModelMessageDataImpl.java 5KB
VirtualDeviceDataImpl.java 5KB
AuthClientController.java 5KB
WebSocketClientVerticle.java 5KB
WeChatUtil.java 4KB
ScriptPayloadParser.java 4KB
ProtocolUtil.java 4KB
TransparentConverter.java 4KB
TransparentConverter.java 4KB
BizComponentManager.java 4KB
DLT645FunCode.java 4KB
LinkFactory.java 4KB
TcpClientLink.java 4KB
DevicePropertyDataImpl.java 4KB
SpringUtils.java 4KB
MqttClientLink.java 4KB
SaTokenConfigure.java 4KB
SpaceController.java 4KB
DevicePropertyDataImpl.java 4KB
共 606 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
- 小小飞同学2024-07-25果断支持这个资源,资源解决了当前遇到的问题,给了新的灵感,感谢分享~
Java程序员-张凯
- 粉丝: 1w+
- 资源: 7527
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 大数据技术综述:Hadoop生态体系,Hive,QSL,MR,Flume等详解
- 系统学习直播运营:掌握起号方法、主播能力、小店随心推,打造爆款直播.mp4
- 万相台无界版2024全面更新,详解关键词、测款测图与精准人群布局.mp4
- Pantum DS-2XX系列诊断手册.pdf
- Pantum DS-2XX系列拆装手册.pdf
- 奔图A3装订机.pdf
- 大数据技术原理详解及其核心框架应用的多项选择题汇总
- labview液压泵试验台程序:功能包括,同PLC通讯程序,液压动画,手动控制及调试,传感器标定,报警设置及报警记录,自动实验,数据处理曲线处理,数据库存储及查询,报表自动生成及打印,扫码枪扫码及信号
- M7300系列.pdf
- M6700 6800 7100 7200.pdf
- M7600 7650系列.pdf
- BM5100 5200.pdf
- BM4000、BM4100系列.pdf
- 大数据复习PPT.zip
- 毕业设计-基于python大学生就业信息管理系统(django)毕业设计与实现(源码+数据库)
- M5000-6000、M5100-5200系列.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功