[
https://issues.apache.org/jira/browse/GOBBLIN-2158?focusedWorklogId=935119&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-935119
]
ASF GitHub Bot logged work on GOBBLIN-2158:
-------------------------------------------
Author: ASF GitHub Bot
Created on: 18/Sep/24 05:22
Start Date: 18/Sep/24 05:22
Worklog Time Spent: 10m
Work Description: pratapaditya04 commented on code in PR #4057:
URL: https://github.com/apache/gobblin/pull/4057#discussion_r1764403116
##########
gobblin-api/src/main/java/org/apache/gobblin/util/io/GsonInterfaceAdapter.java:
##########
@@ -189,7 +192,38 @@ private <S> S readValue(JsonObject jsonObject,
TypeToken<S> defaultTypeToken) th
}
public static <T> Gson getGson(Class<T> clazz) {
- Gson gson = new GsonBuilder().registerTypeAdapterFactory(new
GsonInterfaceAdapter(clazz)).create();
+ Gson gson = new GsonBuilder()
+
.setObjectToNumberStrategy(CustomToNumberPolicy.INTEGER_OR_LONG_OR_DOUBLE)
+ .registerTypeAdapterFactory(new GsonInterfaceAdapter(clazz))
+ .create();
return gson;
}
+
+ public enum CustomToNumberPolicy implements ToNumberStrategy {
+ INTEGER_OR_LONG_OR_DOUBLE {
+ @Override
+ public Number readNumber(JsonReader in) throws IOException {
+ String value = in.nextString();
+ try {
+ return Integer.parseInt(value);
+ } catch (NumberFormatException var3) {
+ try {
+ return Long.parseLong(value);
+ } catch (NumberFormatException var2) {
Review Comment:
Nice work on the custom number parsing. But this includes a lot of nesting
which could imapact readibility and maintainability , I sugges tbreaking down
the nested try-catch blocks in readNumber into smaller methods for each number
type (e.g., tryParseInteger, tryParseLong, tryParseDouble). This will improve
readability and maintainability by reducing nesting.
Sample code`private Number parseNumber(String value, JsonReader in) throws
IOException {
Number number = tryParseInteger(value);
if (number != null) return number;
number = tryParseLong(value);
if (number != null) return number;
return tryParseDouble(value, in);
}
private Number tryParseInteger(String value) { /* ... */ }
private Number tryParseLong(String value) { /* ... */ }
private Number tryParseDouble(String value, JsonReader in) throws
IOException { /* ... */ }
`
Issue Time Tracking
-------------------
Worklog Id: (was: 935119)
Time Spent: 1h 10m (was: 1h)
> Upgrade GSON version to 2.8.9
> -----------------------------
>
> Key: GOBBLIN-2158
> URL: https://issues.apache.org/jira/browse/GOBBLIN-2158
> Project: Apache Gobblin
> Issue Type: Task
> Reporter: Vivek Rai
> Priority: Major
> Time Spent: 1h 10m
> Remaining Estimate: 0h
>
> Upgrade GSON version to 2.8.9 and add a custom ObjectToIntegerDeserialize
> policy to avoid getting integer converted to double or long while deserialize.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)