Я использую JsValue
asOpt
для преобразования json
в модель T
. Моя проблема в том, что синтаксический анализ json
не выполняется, и я получаю None
, но нет описательного сообщения об ошибке, которое указывает на проблему с json
. Есть ли лучший метод, чем asOpt
, который я мог бы использовать?
Код, который преобразует JsValue
в модель:
implicit val myDataReads:Reads[MyData] = (
(JsPath \ "field1").readNullable[UUID] and
(JsPath \ "field2").read[String] and
(JsPath \ "field3").read[List[String]] and
(JsPath \ "field4").read[Seq[Byte]] and
(JsPath \ "field5").read[String] and
(JsPath \ "field6").read[Set[String]] and
(JsPath \ "field7").read[String] and
(JsPath \ "field8").read[String]
)(MyData.apply _)
Вышеуказанное не является описательным. Я думал создать свой кастом Reads
, но я застрял. Пока я написал:
val myDataReads = new Reads[MyData] {
//the JsValue passed to this reads should conform to structure expected by MyData
def reads(jsv:JsValue) = JsResult = {
//I want to pick each field, check its value and print error is something is wrong
val uuidOptionReads:Reads[Option[UUID]] = (JsPath \ "field1").readNullable[UUID]; //not sure if this is correct
//now I have got new Reads but how do I get uuid from here?
uuidOptionReads.reads(/*reads expects a JsValue but I don't know what to pass here.*/)
/*I want to repeat the above logic for other fields*/
}
}