`JsonAdapter.fromJson` functions are documented as throwing `IOException` but actually throw `JsonDataException`
Orbar opened this issue · 1 comments
Orbar commented
JsonAdapter.fromJson
function are annotated with @Throws(IOException::class)
indicating that is the exception that they will throw when there is an error when deserializing a json string, however what is actually thrown is a JsonDataException which is a RuntimeException
meaning that if you try to catch the document IOException
, your error handling code will be skipped.
For example, consider the following code
@JsonClass(generateAdapter = true)
data class MyType(@Json(name = "one") override val param: String)
...
try {
myTypeAdapter.fromJson("{}") // just an empty json
catch (e: IOException) {
// exception will not be caught
}
JsonDataException
should extend IOException
, or JsonAdapter.fromJson
should be updated to indicate that they throw JsonDataException
JakeWharton commented
The exception list is not exhaustive. IOException
is declared because it is a checked exception for Java callers.