Как правильно обрабатывать важные непроверенные исключения - PullRequest
6 голосов
/ 26 февраля 2012

Я пишу библиотеку, которая оборачивается вокруг REST API. Обёртка, которую я создаю, использует GSON для десериализации json в мой объект. По сути, как-то так ...

public Post getPost(url) throws IOException {
  String jsonString = httpClient.get(url);
  Post p = gson.fromJson(jsonString, Post.class);
  // return Post to client and let client do something with it.
}

Если я правильно понимаю, IOException является проверенным исключением. Я говорю своему клиенту: Эй, приятель, тебе лучше остерегаться и оправиться от этого исключения. Теперь мой клиент может обернуть вызов в try / catch и определить, что делать, если произошел сбой в сети.

Метод GSON fromJson () вызывает исключение JsonSyntaxException. Я считаю, что это не проверяется в мире Java, так как одним из его суперклассов является RuntimeException, а также потому, что мне не нужно добавлять try / catch или другие «броски», такие как IOException.

Предполагая, что то, что я сказал до сих пор, является правильным - как именно API и клиент должны разрешить эту ситуацию? Если строка json является мусором, мой клиент потерпит неудачу из-за JsonSyntaxException, потому что он не проверен.

// Client
PostService postService = new PostService();
try{
  Post p = postService.getPost(urlString);
  // do something with post
}catch (IOException){
   // handle exception
}
// ok, what about a JsonSyntaxException????

Как лучше всего справляться с этими ситуациями?

1 Ответ

6 голосов
/ 26 февраля 2012

Вам разрешено ловить непроверенные исключения. Просто добавьте catch(JsonSyntaxException e) в свой блок try-catch. После того, как вы поймали JsonSyntaxException, вы можете либо обработать его, либо сбросить как проверенное исключение.

Ex:

try{
    //do whatever
}catch(JsonSyntaxException e){
    e.printStackTrace();
    // throw new Exception(e); //checked exception
}catch(IOException e){
    e.printStackTrace();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...