public HalResource deserialize( JsonElement json, Type typeOfT, JsonDeserializationContext context, Class<?> targetType) throws JsonParseException { // Das Objekt mal von Gson deserialiseren lassen HalResource result = context.deserialize(json, targetType); // Es handelt sich um ein JSON-Objekt. JsonObject jsonObject = json.getAsJsonObject(); // Nodes mit den Links und den eingebetteten Resourcen auslesen JsonObject linkRoot = jsonObject.getAsJsonObject(HalConstants.LINK_ROOT); JsonObject embeddedRoot = jsonObject.getAsJsonObject(HalConstants.EMBEDDED_ROOT); // Die Felder nach Links und eingebetteten Resourcen absuchen List<Field> fields = HalReflectionHelper.getAllFields(targetType); for (Field field : fields) { // Ist es ein Link? if (HalReflectionHelper.isLink(field) && linkRoot != null) { // Metadaten auslesen HalReferenceMetaData metaData = HalReflectionHelper.getReferenceMetaData(field); // Im JSON danach suchen JsonElement jsonField = linkRoot.get(metaData.getName()); // Wenn im JSON kein Feld gefunden wurde, müssen wir auch nichts machen if (jsonField == null) { continue; } // Wert aus dem Json zurück in das Objekt schreiben writeLink(result, field, jsonField, context); } // Ist es eine Resource? if (HalReflectionHelper.isResource(field) && embeddedRoot != null) { // Name der Resouce auslesen String resName = HalReflectionHelper.getResourceName(field); // Im JSON danach suchen JsonElement jsonField = embeddedRoot.get(resName); // Wenn im JSON kein entsprechendes Feld gefunden wurde, können wir auch nichts machen if (jsonField == null) { continue; } // Werte aus dem Json zurück ins Objekt schreiben writeResource(result, field, jsonField, context); } } return result; }