protected void writeLink( HalResource result, Field field, JsonElement jsonField, JsonDeserializationContext context) { // Einfacher Fall: Das Feld ist ein String if (field.getType().equals(String.class)) { if (jsonField.isJsonObject()) { writeLinkInString(result, field, jsonField, context); } else if (jsonField.isJsonArray()) { // Wenn das Array nur ein Element hat, dann können wir es auch verarbeiten JsonArray jsonArray = jsonField.getAsJsonArray(); if (jsonArray.size() == 1) { writeLinkInString(result, field, jsonArray.get(0), context); } } } else if (HalReference.class.isAssignableFrom(field.getType())) { if (jsonField.isJsonObject()) { writeLinkInReference(result, field, jsonField, context); } else if (jsonField.isJsonArray()) { // Wenn das Array nur ein Element hat, können wir es auch verarbeiten JsonArray jsonArray = jsonField.getAsJsonArray(); if (jsonArray.size() == 1) { writeLinkInReference(result, field, jsonArray.get(0), context); } } } else if (Collection.class.isAssignableFrom(field.getType())) { // Wir erwarten ein JSON-Array if (jsonField.isJsonArray()) { // Collection auslesen Collection collection = (Collection) HalReflectionHelper.getValue(field, result); if (collection == null) { throw new HalDeserializingException("Collection is null; no values can be added"); } JsonArray jsonArray = jsonField.getAsJsonArray(); Iterator<JsonElement> iterator = jsonArray.iterator(); while (iterator.hasNext()) { JsonElement element = iterator.next(); writeLinkInCollection(collection, element, context); } } } }
private void writeResource( HalResource result, Field field, JsonElement jsonField, JsonDeserializationContext context) { if (HalResource.class.isAssignableFrom(field.getType())) { if (jsonField.isJsonObject()) { writeEmeddedInResource(result, field, jsonField, context); } else if (jsonField.isJsonArray()) { // Wenn das Array nur ein Element hat, dann können wir es verarbeiten JsonArray jsonArray = jsonField.getAsJsonArray(); if (jsonArray.size() == 1) { writeEmeddedInResource(result, field, jsonArray.get(0), context); } } } else if (Collection.class.isAssignableFrom(field.getType())) { Collection collection = (Collection) HalReflectionHelper.getValue(field, result); // Generischer Type auslesen ParameterizedType gType = (ParameterizedType) field.getGenericType(); Type[] actualTypeArguments = gType.getActualTypeArguments(); if (collection == null) { throw new HalDeserializingException("Collection is null; no values can be added"); } // Wir erwarten ein JSON-Array if (jsonField.isJsonArray()) { JsonArray jsonArray = jsonField.getAsJsonArray(); Iterator<JsonElement> iterator = jsonArray.iterator(); while (iterator.hasNext()) { JsonElement element = iterator.next(); writeEmbeddedInCollection(collection, actualTypeArguments[0], element, context); } } else if (jsonField.isJsonObject()) { writeEmbeddedInCollection(collection, actualTypeArguments[0], jsonField, context); } } }