私たちはリクエスト/応答の処理にjavax.json
を使用するプロジェクトに取り組んでいます。私たちが使用する実装はorg.glassfish.json
です。私に迷惑をかけているのは、Object
の追加/書き込みをサポートしていないということです。だから私はこの実装がサポートするすべての型をチェックしなければならないメソッドを作成しました。このようなもの:jsonビルディングのための型チェック/キャストの最適化
private static void addTypeSafeValue(JsonObjectBuilder jsonBuilder, String key, Object value) {
if (value instanceof String) {
jsonBuilder.add(key, value.toString());
} else if (value instanceof Integer) {
jsonBuilder.add(key, (int) value);
} else if (value instanceof Boolean) {
jsonBuilder.add(key, (boolean) value);
} else if (value instanceof Long) {
jsonBuilder.add(key, (long) value);
} else if (value instanceof Double) {
jsonBuilder.add(key, (double) value);
} else if (value instanceof Uri) {
jsonBuilder.add(key, ((Uri) value).toString());
} else if (value instanceof Map) {
jsonBuilder.add(key, convertToJsonObject((Map<String, ?>) value));
} else if (value instanceof Collection) {
jsonBuilder.add(key, convertToJsonArray((Collection<?>) value));
} else if (value instanceof JsonObject) {
jsonBuilder.add(key, (JsonObject) value);
} else if (value instanceof JsonArray) {
jsonBuilder.add(key, (JsonArray) value);
} else {
throw new IllegalArgumentException("Not implemented for: " + value.getClass());
}
}
このコードを最適化する方法があれば、私は疑問に思います。 もう一つの部分は、複写された小切手/コードをカットするために、消費者にJsonObjectBuilder
またはJsonGenerator
を渡したいということです。
ビルダーとジェネレーターはパラメーター(キー、値)として受け入れますが、関数の名前のみが異なります。私は両方のためにこのチェックを使用したい(方法がある場合)。このようなもの:addTypeSafeValue(コンシューマコンシューマ、Stringキー、オブジェクト値)また、あなたの答えに感謝します。 –
Tony