2017-09-08 17 views
1

Play 프레임 워크 2.3에서 웹 소켓을 사용하고 있습니다.사용자 정의 유형에 acceptWithActor를 사용할 때 JSON 구문 분석 오류를 catch하는 방법은 무엇입니까?

the official how-to page에서이 스 니펫을 참조하십시오.

import play.api.mvc._ 
import play.api.Play.current 

def socket = WebSocket.acceptWithActor[InEvent, OutEvent] { request => out => 
    MyWebSocketActor.props(out) 
} 

JSON 구문 분석 오류 (RuntimeException : JSON 구문 분석 오류)를 어떻게 catch합니까?

이 질문은 아래 링크 된 것과 매우 유사하지만 JsValue 유형이 아닌 사용자 정의 유형 (InEvent, OutEvent)을 사용하고 있습니다. JsValue 또는 문자열로 변환하고 싶지 않습니다. 성공하면 InEvent 형식으로 변환하거나 더 자세한 설명 오류를 발생시켜야합니다.

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

당신은 단지 대신 미리 정의 된 jsonFrame 사용자 지정 방법 등을 이용하여의, 둘 다 다시 작성해야 :

How do I catch json parse error when using acceptWithActor?

답변

2

어딘가에 당신의 범위 내에서 FrameFormatter[InEvent]FrameFormatter[OutEvent]의 암시 적 정의가있다 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 
    ) 
) 

와 함께 상기 행을 대체 : 작동

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

. 감사! –