Esempio n. 1
0
  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);
        }
      }
    }
  }
Esempio n. 2
0
  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);
      }
    }
  }