2017-09-08 2 views
1

Ich benutze Websockets in Play Framework 2.3.Wie erhalte ich einen JSON-Parse-Fehler, wenn Sie acceptWithActor mit benutzerdefinierten Typen verwenden?

Referenzieren dieses Snippet von the official how-to page.

Wie würde ich einen JSON-Parse-Fehler abfangen (RuntimeException: Fehler bei der Analyse von JSON)?

Diese Frage ist der unten verlinkten Frage sehr ähnlich, aber ich verwende benutzerdefinierte Typen (InEvent, OutEvent) und nicht den JsValue-Typ. Ich möchte nicht in einen JsValue oder String transformieren. Ich muss es bei Erfolg in den InEvent-Typ transformieren oder einen beschreibenden Fehler werfen.

How do I catch json parse error when using acceptWithActor?

Antwort

2

Irgendwo in Ihrem Umfang gibt es implizite Definitionen von FrameFormatter[InEvent] und FrameFormatter[OutEvent]:

implicit val inEventFrameFormatter = FrameFormatter.jsonFrame[InEvent] 
implicit val outEventFrameFormatter = FrameFormatter.jsonFrame[OutEvent] 

Sie nur beide neu zu schreiben, anstatt die vordefinierte jsonFrame der Verwendung einer benutzerdefinierten Methode wie customJsonFrame:

def customJsonFrame[A: Format]: FrameFormatter[A] = 
    FrameFormatter.jsonFrame.transform[A](
    out => Json.toJson(out), 
    in => Json.fromJson[A](in).fold(
     error => throw new CustomException(), 
     a => a 
    ) 
) 

und ersetzen Sie die oben genannten Zeilen mit:

implicit val inEventFrameFormatter = customJsonFrame[InEvent] 
implicit val outEventFrameFormatter = customJsonFrame[OutEvent] 
+0

, das funktioniert. Vielen Dank! –

Verwandte Themen