cast incoming attributes/telemetry numeric data type if possible
This commit is contained in:
parent
162029939b
commit
62db6001fd
@ -22,6 +22,7 @@ import com.google.gson.JsonObject;
|
|||||||
import com.google.gson.JsonParser;
|
import com.google.gson.JsonParser;
|
||||||
import com.google.gson.JsonPrimitive;
|
import com.google.gson.JsonPrimitive;
|
||||||
import com.google.gson.JsonSyntaxException;
|
import com.google.gson.JsonSyntaxException;
|
||||||
|
import org.apache.commons.lang3.math.NumberUtils;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
import org.thingsboard.server.common.data.kv.AttributeKey;
|
import org.thingsboard.server.common.data.kv.AttributeKey;
|
||||||
import org.thingsboard.server.common.data.kv.AttributeKvEntry;
|
import org.thingsboard.server.common.data.kv.AttributeKvEntry;
|
||||||
@ -128,24 +129,22 @@ public class JsonConverter {
|
|||||||
if (element.isJsonPrimitive()) {
|
if (element.isJsonPrimitive()) {
|
||||||
JsonPrimitive value = element.getAsJsonPrimitive();
|
JsonPrimitive value = element.getAsJsonPrimitive();
|
||||||
if (value.isString()) {
|
if (value.isString()) {
|
||||||
|
if(NumberUtils.isParsable(value.getAsString())) {
|
||||||
|
try {
|
||||||
|
result.add(buildNumericKeyValueProto(value, valueEntry.getKey()));
|
||||||
|
} catch (Throwable th) {
|
||||||
result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.STRING_V)
|
result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.STRING_V)
|
||||||
.setStringV(value.getAsString()).build());
|
.setStringV(value.getAsString()).build());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.STRING_V)
|
||||||
|
.setStringV(value.getAsString()).build());
|
||||||
|
}
|
||||||
} else if (value.isBoolean()) {
|
} else if (value.isBoolean()) {
|
||||||
result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.BOOLEAN_V)
|
result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.BOOLEAN_V)
|
||||||
.setBoolV(value.getAsBoolean()).build());
|
.setBoolV(value.getAsBoolean()).build());
|
||||||
} else if (value.isNumber()) {
|
} else if (value.isNumber()) {
|
||||||
if (value.getAsString().contains(".")) {
|
result.add(buildNumericKeyValueProto(value, valueEntry.getKey()));
|
||||||
result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.DOUBLE_V)
|
|
||||||
.setDoubleV(value.getAsDouble()).build());
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
long longValue = Long.parseLong(value.getAsString());
|
|
||||||
result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.LONG_V)
|
|
||||||
.setLongV(longValue).build());
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
throw new JsonSyntaxException("Big integer values are not supported!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
throw new JsonSyntaxException(CAN_T_PARSE_VALUE + value);
|
throw new JsonSyntaxException(CAN_T_PARSE_VALUE + value);
|
||||||
}
|
}
|
||||||
@ -156,6 +155,24 @@ public class JsonConverter {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static KeyValueProto buildNumericKeyValueProto(JsonPrimitive value, String key) {
|
||||||
|
if (value.getAsString().contains(".")) {
|
||||||
|
return KeyValueProto.newBuilder()
|
||||||
|
.setKey(key)
|
||||||
|
.setType(KeyValueType.DOUBLE_V)
|
||||||
|
.setDoubleV(value.getAsDouble())
|
||||||
|
.build();
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
long longValue = Long.parseLong(value.getAsString());
|
||||||
|
return KeyValueProto.newBuilder().setKey(key).setType(KeyValueType.LONG_V)
|
||||||
|
.setLongV(longValue).build();
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
throw new JsonSyntaxException("Big integer values are not supported!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static TransportProtos.ToServerRpcRequestMsg convertToServerRpcRequest(JsonElement json, int requestId) throws JsonSyntaxException {
|
public static TransportProtos.ToServerRpcRequestMsg convertToServerRpcRequest(JsonElement json, int requestId) throws JsonSyntaxException {
|
||||||
JsonObject object = json.getAsJsonObject();
|
JsonObject object = json.getAsJsonObject();
|
||||||
return TransportProtos.ToServerRpcRequestMsg.newBuilder().setRequestId(requestId).setMethodName(object.get("method").getAsString()).setParams(GSON.toJson(object.get("params"))).build();
|
return TransportProtos.ToServerRpcRequestMsg.newBuilder().setRequestId(requestId).setMethodName(object.get("method").getAsString()).setParams(GSON.toJson(object.get("params"))).build();
|
||||||
@ -370,7 +387,15 @@ public class JsonConverter {
|
|||||||
if (element.isJsonPrimitive()) {
|
if (element.isJsonPrimitive()) {
|
||||||
JsonPrimitive value = element.getAsJsonPrimitive();
|
JsonPrimitive value = element.getAsJsonPrimitive();
|
||||||
if (value.isString()) {
|
if (value.isString()) {
|
||||||
|
if(NumberUtils.isParsable(value.getAsString())) {
|
||||||
|
try {
|
||||||
|
parseNumericValue(result, valueEntry, value);
|
||||||
|
} catch (Throwable th) {
|
||||||
result.add(new StringDataEntry(valueEntry.getKey(), value.getAsString()));
|
result.add(new StringDataEntry(valueEntry.getKey(), value.getAsString()));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
result.add(new StringDataEntry(valueEntry.getKey(), value.getAsString()));
|
||||||
|
}
|
||||||
} else if (value.isBoolean()) {
|
} else if (value.isBoolean()) {
|
||||||
result.add(new BooleanDataEntry(valueEntry.getKey(), value.getAsBoolean()));
|
result.add(new BooleanDataEntry(valueEntry.getKey(), value.getAsBoolean()));
|
||||||
} else if (value.isNumber()) {
|
} else if (value.isNumber()) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user