Commit dcba4f6b582d1902740d506d92e178bb8c48544f
Merge branch 'master' of github.com:thingsboard/thingsboard
Showing
1 changed file
with
40 additions
and
15 deletions
@@ -22,6 +22,7 @@ import com.google.gson.JsonObject; | @@ -22,6 +22,7 @@ import com.google.gson.JsonObject; | ||
22 | import com.google.gson.JsonParser; | 22 | import com.google.gson.JsonParser; |
23 | import com.google.gson.JsonPrimitive; | 23 | import com.google.gson.JsonPrimitive; |
24 | import com.google.gson.JsonSyntaxException; | 24 | import com.google.gson.JsonSyntaxException; |
25 | +import org.apache.commons.lang3.math.NumberUtils; | ||
25 | import org.springframework.util.StringUtils; | 26 | import org.springframework.util.StringUtils; |
26 | import org.thingsboard.server.common.data.kv.AttributeKey; | 27 | import org.thingsboard.server.common.data.kv.AttributeKey; |
27 | import org.thingsboard.server.common.data.kv.AttributeKvEntry; | 28 | import org.thingsboard.server.common.data.kv.AttributeKvEntry; |
@@ -128,24 +129,22 @@ public class JsonConverter { | @@ -128,24 +129,22 @@ public class JsonConverter { | ||
128 | if (element.isJsonPrimitive()) { | 129 | if (element.isJsonPrimitive()) { |
129 | JsonPrimitive value = element.getAsJsonPrimitive(); | 130 | JsonPrimitive value = element.getAsJsonPrimitive(); |
130 | if (value.isString()) { | 131 | if (value.isString()) { |
131 | - result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.STRING_V) | ||
132 | - .setStringV(value.getAsString()).build()); | 132 | + if(NumberUtils.isParsable(value.getAsString())) { |
133 | + try { | ||
134 | + result.add(buildNumericKeyValueProto(value, valueEntry.getKey())); | ||
135 | + } catch (Throwable th) { | ||
136 | + result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.STRING_V) | ||
137 | + .setStringV(value.getAsString()).build()); | ||
138 | + } | ||
139 | + } else { | ||
140 | + result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.STRING_V) | ||
141 | + .setStringV(value.getAsString()).build()); | ||
142 | + } | ||
133 | } else if (value.isBoolean()) { | 143 | } else if (value.isBoolean()) { |
134 | result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.BOOLEAN_V) | 144 | result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.BOOLEAN_V) |
135 | .setBoolV(value.getAsBoolean()).build()); | 145 | .setBoolV(value.getAsBoolean()).build()); |
136 | } else if (value.isNumber()) { | 146 | } else if (value.isNumber()) { |
137 | - if (value.getAsString().contains(".")) { | ||
138 | - result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.DOUBLE_V) | ||
139 | - .setDoubleV(value.getAsDouble()).build()); | ||
140 | - } else { | ||
141 | - try { | ||
142 | - long longValue = Long.parseLong(value.getAsString()); | ||
143 | - result.add(KeyValueProto.newBuilder().setKey(valueEntry.getKey()).setType(KeyValueType.LONG_V) | ||
144 | - .setLongV(longValue).build()); | ||
145 | - } catch (NumberFormatException e) { | ||
146 | - throw new JsonSyntaxException("Big integer values are not supported!"); | ||
147 | - } | ||
148 | - } | 147 | + result.add(buildNumericKeyValueProto(value, valueEntry.getKey())); |
149 | } else { | 148 | } else { |
150 | throw new JsonSyntaxException(CAN_T_PARSE_VALUE + value); | 149 | throw new JsonSyntaxException(CAN_T_PARSE_VALUE + value); |
151 | } | 150 | } |
@@ -156,6 +155,24 @@ public class JsonConverter { | @@ -156,6 +155,24 @@ public class JsonConverter { | ||
156 | return result; | 155 | return result; |
157 | } | 156 | } |
158 | 157 | ||
158 | + private static KeyValueProto buildNumericKeyValueProto(JsonPrimitive value, String key) { | ||
159 | + if (value.getAsString().contains(".")) { | ||
160 | + return KeyValueProto.newBuilder() | ||
161 | + .setKey(key) | ||
162 | + .setType(KeyValueType.DOUBLE_V) | ||
163 | + .setDoubleV(value.getAsDouble()) | ||
164 | + .build(); | ||
165 | + } else { | ||
166 | + try { | ||
167 | + long longValue = Long.parseLong(value.getAsString()); | ||
168 | + return KeyValueProto.newBuilder().setKey(key).setType(KeyValueType.LONG_V) | ||
169 | + .setLongV(longValue).build(); | ||
170 | + } catch (NumberFormatException e) { | ||
171 | + throw new JsonSyntaxException("Big integer values are not supported!"); | ||
172 | + } | ||
173 | + } | ||
174 | + } | ||
175 | + | ||
159 | public static TransportProtos.ToServerRpcRequestMsg convertToServerRpcRequest(JsonElement json, int requestId) throws JsonSyntaxException { | 176 | public static TransportProtos.ToServerRpcRequestMsg convertToServerRpcRequest(JsonElement json, int requestId) throws JsonSyntaxException { |
160 | JsonObject object = json.getAsJsonObject(); | 177 | JsonObject object = json.getAsJsonObject(); |
161 | return TransportProtos.ToServerRpcRequestMsg.newBuilder().setRequestId(requestId).setMethodName(object.get("method").getAsString()).setParams(GSON.toJson(object.get("params"))).build(); | 178 | 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 { | @@ -370,7 +387,15 @@ public class JsonConverter { | ||
370 | if (element.isJsonPrimitive()) { | 387 | if (element.isJsonPrimitive()) { |
371 | JsonPrimitive value = element.getAsJsonPrimitive(); | 388 | JsonPrimitive value = element.getAsJsonPrimitive(); |
372 | if (value.isString()) { | 389 | if (value.isString()) { |
373 | - result.add(new StringDataEntry(valueEntry.getKey(), value.getAsString())); | 390 | + if(NumberUtils.isParsable(value.getAsString())) { |
391 | + try { | ||
392 | + parseNumericValue(result, valueEntry, value); | ||
393 | + } catch (Throwable th) { | ||
394 | + result.add(new StringDataEntry(valueEntry.getKey(), value.getAsString())); | ||
395 | + } | ||
396 | + } else { | ||
397 | + result.add(new StringDataEntry(valueEntry.getKey(), value.getAsString())); | ||
398 | + } | ||
374 | } else if (value.isBoolean()) { | 399 | } else if (value.isBoolean()) { |
375 | result.add(new BooleanDataEntry(valueEntry.getKey(), value.getAsBoolean())); | 400 | result.add(new BooleanDataEntry(valueEntry.getKey(), value.getAsBoolean())); |
376 | } else if (value.isNumber()) { | 401 | } else if (value.isNumber()) { |