Проверка json перед приведением к пользовательскому объекту - PullRequest
0 голосов
/ 15 октября 2019

Я использую строки json для хранения и получения значений объекта / класса. Я хочу убедиться, что данная строка json будет соответствовать указанному объекту. Я хотел бы сделать это без необходимости использовать блок try..catch, если это возможно. Вот как у меня это на данный момент. Try ... catch работает, но я где-то читал, что рекомендуется избавиться от как можно большего количества try ... catch.

Допустим, у нас есть класс следующим образом

public class Person
    public String Name;
    public int Age;
end class

Затем нам дается следующая строка json

{
"phonenumber":"777 777 7777"
"gender":"F"
}

, очевидно, строку json нельзя привести в данный класс. Это попытка ... поймать единственный способ проверить, является ли castable, или есть другой способ? (к счастью, это ОЧЕНЬ очевидно).

1 Ответ

0 голосов
/ 15 октября 2019

Ситуации, подобные этой, являются причиной того, что существуют структуры обработки try-catch / exception, поэтому я предлагаю не беспокоиться. Есть много причин, по которым вы можете получить искаженный JSON, который не может быть проанализирован (например, возможно, изменился API бэкэнда, некоторые проблемы с сетью, которые отрезали поток и т. Д.), И ваш клиентский код не может быть обработанвсе это индивидуально. Исключения обобщают эти ситуации и позволяют вам изящно реагировать на них.

У Java есть пресловутая репутация того, что все загружается с исключениями, которые становятся утомительным образцом, поэтому хороший SDK или автор библиотеки найдет способ абстрагировать множественные«низкоуровневые исключения» с меньшим количеством «высокоуровневых» исключений, так что пользователям этого кода не придется обрабатывать все это самостоятельно

Например, вы анализируете объект JSON и давайте предположим,Вы получили это от вызова сетевого API. И из-за этого вашему сетевому коду может потребоваться обработать IOException, URLException и т. Д. Итак, вы можете скрыть весь этот код в некотором классе класса APIService, который обрабатывает все эти исключения внутренне, но только создает пузыриединое «APIException» для тех, кто вызывает код, и передает подробности любой проблемы, возникающей в APIException.

Как автору «APIService», вам все равно придется обрабатывать все эти различные исключения, но кто бы нииспользование вашего кода должно будет обрабатывать только APIException. Это не только скрывает детали реализации (что хорошо), но и тому, кто использует ваш код, придется писать меньше шаблонов (тоже хорошо)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...