Von den Blicken des Codes scheint es, dass Ihr einen JSON-String selbst die erstellen versuchen, ein Array vom Typ Object verwenden. Meine einzige Vermutung, warum dies nicht funktioniert, ist, dass GSON (die JSON-Bibliothek, die von play verwendet wird) nicht weiß, wie man das in Schlüssel/Wert-Paare umwandelt (obwohl Ihr Array zweidimensional ist). So wie über das Ändern statusArray
zu String und seinen Inhalt:
{
"Status": "401",
"Message": "Unauthorized",
"Detail": "No API Key Supplied"
}
setzen, die in renderJSON(statusArray)
und Sie sollten in Ordnung sein.
Als Alternative Sie eine einfache .json
Vorlage wie folgt erstellen konnte:
{
"Status": ${status},
"Message": ${message},
"Detail": ${detail}
}
und es von einem Controller-Methode über render(status, message, detail)
nennen. status
, message
und detail
Strings auch hier. Beispiel Controller-Methode:
public static void loginFail(final String status, final String message, final String detail) {
render(status, message, detail);
}
und Ihre Vorlage würde loginFail.json
(der Name der Controller-Methode) aufgerufen werden. Auf diese Weise können Sie die Controller-Methode in beliebiger Logik aufrufen, um die Anmeldung zu bestätigen. Sobald die Anmeldung fehlschlägt, geben Sie an, warum dies der Fall ist (über Status, Nachricht und Details), indem Sie die Methode loginFail
aufrufen.
Es ist auch erwähnenswert, dass renderJSON als auch ein String-Argument nehmen kann, was umgeht das GSON-Parsing. Dies ist nützlich, wenn Sie etwas wie Jackson für Ihre JSON-Analyse verwenden (so wie ich). –