Dies ist mein Code:toJson (Map ("Erfolg" -> true "Nachricht" -> str)) nicht in play2 kompiliert werden
import play.api.mvc._
import play.api.libs.json._
import play.api.libs.json.Json._
import play.api.libs.json.Writes._
class BaseController extends Controller with Secured with DefaultWrites {
private implicit def str2json(str: String) = new {
def asSuccessJson = toJson(Map("success" -> true, "message" -> str)) // (*)
def asFailedJson = toJson(Map("success" -> false, "message" -> str)) // (*)
}
}
Aber es kann nicht auf zwei kompiliert werden (*)
Zeilen. Die Fehlermeldung lautet:
Multiple markers at this line
- No Json deserializer found for type scala.collection.immutable.Map[java.lang.String,Any]. Try
to implement an implicit Writes or Format for this type.
- not enough arguments for method toJson: (implicit tjs:
play.api.libs.json.Writes[scala.collection.immutable.Map[java.lang.String,Any]])
play.api.libs.json.JsValue.Unspecified value parameter tjs.
Ich habe zu schreiben als:
def asSuccessJson = toJson(Map("success" -> true.toString, "message" -> str))
Hinweis true.toString
. Es funktioniert aber langweilig.
Wie es zu beheben?
Warten auf die nächste Version, aktuelle ist nicht perfekt . – Freewind
aktuelle api ist ein bisschen roh, aber es bringt alles, was wir brauchen, ohne jede Magie, jede Introspektion. Diese Prinzipien werden mit etwas Zucker und einigen neuen Werkzeugen beibehalten werden ... sei geduldig;) – mandubian
In der Theorie wäre es möglich, einen Serialisierer zu schreiben, der auf Laufzeit versucht, alle Werte von Map [String, Any] mit vorhandenen Serialisierern zu serialisieren? Es ist nicht möglich, format-agnostische API-Layer zu schreiben, ohne dass die Any-Funktion während der Laufzeit serialisiert werden kann – Ciantic