Опция десериализации возвращает None вместо исключения в json4s - PullRequest
4 голосов
/ 25 февраля 2020

При выполнении следующего кода я ожидаю исключения, но вместо этого получаю None. Это ожидается?

import org.json4s.jackson.JsonMethods
import org.json4s.{DefaultFormats, Formats}
implicit val f: Formats = DefaultFormats
val json ="{ \"a\" : { \"c\": 1 }}"

case class Foo(a: Option[String])
val foo = JsonMethods.parse(json).extract[Foo]

println(foo)

>  Foo(None)

также этот код:

import org.json4s.jackson.JsonMethods
import org.json4s.{DefaultFormats, Formats}
implicit val f: Formats = DefaultFormats
val json ="{ \"a\" : { \"c\": 1 }}"

case class Foo(a: String = "")
val foo = JsonMethods.parse(json).extract[Foo]

println(foo)

>  Foo()

1 Ответ

4 голосов
/ 25 февраля 2020

Вы можете применить строгий анализ параметров , изменив формат по умолчанию следующим образом:

implicit val f: Formats = DefaultFormats.withStrictOptionParsing

Основное исключение:

[error] (run-main-2) org.json4s.package$MappingException: No usable value for a
[error] Do not know how to convert JObject(List((c,JInt(1)))) into class java.lang.String
...