2014-07-11 3 views
6

play-jsonJson.parse() 메서드로 Json 예외를 catch하면 JsonMappingException이 throw 될 수 있습니다. 또한 JsonParseException을 던질 수도 있습니다. 이러한 예외를 잡으려면 com.fasterxml.jackson에 도달해야합니까?재생 Json 라이브러리

나는 설명서에서 play-json이 Jackson 주위의 래퍼 인 Jerkson 위에 만들어 졌음을 알고 있습니다.

추상화를 통해 도달하는 느낌을주는 패키지보다는 재생 라이브러리에서 예외가 발생하는 것이 훨씬 안전합니다. 더 좋은 방법이 있습니까? play-json 라이브러리는 더 나은 추상화를 위해 이러한 오류를 래핑해야합니까?

이 질문은 Scala 용입니다.

답변

6

Json에 안전한 맛이 parse 인 것이 좋겠지 만 동의하지만 그 주된 관심사는 직렬화 및 직렬화가 아니라 인코딩 및 디코딩입니다 (예를 들어 최상위 수준의 ScalaDoc 설명을 보면, "JSON 문자열 처리"가 아닌 "JsValues를 처리하는 도우미 함수"가 표시됩니다. JsValueString에서 점점 일반적으로

은 프로그램의 경계에 가까운 일해야하고, 당신이 플레이에 처리하는 방법 들어오는 JSON 보면, 당신은 안전 옵션 (예를 들어, request.body.asJson)가있는 것을 볼 수 있습니다.

Play에서 구현 세부 사항이 드러나지 않도록 Jackson 예외를 래핑하는 것이 편리 할 수 ​​있지만 이러한 예외를 잡기 위해 Jackson에게 "도달"할 필요는 없습니다. parse으로 전화를 겁니다. Try A의 :

import play.api.libs.json._ 
import scala.util.Try 

val parsed: Try[JsValue] = Try(Json.parse("{ broken")) 

또는 :

val decoded: Option[Map[String, Int]] = Try(
    Json.parse("""{ "foo": 1 }""") 
).toOption.flatMap(_.asOpt[Map[String, Int]]) 

등등.

+0

'시도'가 작동합니다. 감사. 나는 이것을 웹 컨텍스트에서 사용하지 않기 때문에'request.body.asJson'는 옵션이 아닙니다. – user650654

관련 문제