Можем ли мы обработать исключение из уровня дао в уровень представления, не влияя на уровень обслуживания (без изменений в уровне обслуживания) - PullRequest
0 голосов
/ 09 июня 2018

Сценарий подобен тому, как я написал приложение на основе MVC: Контроллер - Сервис - Уровень DAO.Теперь у меня есть исключение на уровне DAO, и я хочу обработать это исключение на уровне представления, чтобы уровень обслуживания не нуждался в изменениях.

Поскольку при использовании регулярных try/catch или throws он должен проходить через службуслой, который мне не нужен.

Есть ли лучший способ добиться этого?

class Controller{
  method1(){}
}

class service(){
  method1Serice(){}
}

class DAO(){
  method1DAO(){
  // exception occurs here
}

Ответы [ 4 ]

0 голосов
/ 09 июня 2018

Возможно, вы ищете Controller Based Exception Handling, вы можете проверить это в Обработка исключений в Spring MVC , а также Обработка ошибок для REST с Spring .

@ExceptionHandler(YourException.class)
public String handleException(){
    logger.info(message);
    return "database_error";
}

На самом деле, я бы посоветовал вам правильно обработать исключения в Service-Layer и правильно инкапсулировать это исключение, чтобы вернуться к пользователю через Controller-Layer.

Обычно checked exceptions несут некоторые значимые сообщения, которые можно использовать для восстановления или позволить вызывающей стороне явно обработать его должным образом.Старайтесь не избегать этого напрямую, потому что он есть.

0 голосов
/ 09 июня 2018

Вы можете сделать так, чтобы класс DAO выдал непроверенное исключение.(любой подкласс RuntimeException подойдет).Вы можете создать собственное исключение или использовать любое из предопределенных.просто убедитесь, что Service не поймает Throwable, и вы можете Controller поймать его.

0 голосов
/ 09 июня 2018

Вы можете расширить свой класс исключений из RuntimeException, чтобы компилятор не жаловался на обработку исключений.Затем вы можете поймать это исключение на уровне представления.

0 голосов
/ 09 июня 2018

Насколько я понимаю, объект доступа к данным (DAO) предназначен для передачи данных между сервером и клиентом.Я предполагаю, что клиент - это то, что вы называете уровнем представления .Другими словами, часть, с которой взаимодействует конечный пользователь.Таким образом, DAO должен содержать только поля и методы доступа, то есть он не должен содержать логику.Следовательно, он не должен содержать методы, которые могут генерировать исключения.Поэтому я хотел бы предложить, возможно, изменить дизайн вашего приложения.В противном случае, возможно, вы можете предоставить более подробный код?

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