2016-09-11 6 views
0

Я реализую приложение весеннего отдыха как проект мультимодульного модуля maven. контроллеров в Интернете, сервисе и дао в качестве слоев.исключение весны в сервисе

У меня возникли проблемы, чтобы найти точную причину и трассировку стека для любого исключения в уровне обслуживания. Я не использую блок try try в методах службы. Вместо этого я просто бросаю исключение. Теперь, когда генерируется исключение нулевого указателя, глобальный обработчик исключений находит исключение. Он говорит null, но не обеспечивает трассировки стека.

Нужно ли использовать блоки try catch? Если да, у меня будут эти блоки по всем методам обслуживания.

Любые предложения приветствуются.

+0

Показать свой глобальный обработчик исключений. Я предполагаю, что вы не показываете стек, если он не отображается. – Kayaman

+0

@ExceptionHandler ({Exception.class}) @ResponseBody общественного ResponseEntity handleAnyException (Исключение е) { \t logger.error ("Ошибка:" + e.getMessage()); \t logger.error ("Ошибка [причина]:" + e.getCause()); } – user3930151

+0

Еще одна вещь. Вызывается целевое исключение вызова. Я тоже не нашел там стек. – user3930151

ответ

1

Ваш обработчик исключений не отображает stacktrace, потому что вы не говорите об этом. Ваш код плох и сломан.

logger.error("Error: " + e.getMessage()); 
logger.error("Error [cause]: " + e.getCause()); 

Использование getMessage(), чтобы увидеть, что исключение вы испытываете бесполезно. A NullPointerException возвращает в качестве сообщения строку String "null", которая не поможет вам решить проблемы один бит. Запись этой причины вызовет метод toString()cause, который также не поможет.

Единственный способ иметь дело с исключениями является:

logger.error("Error", e); 

Это будет регистрировать StackTrace должным образом, включая любые причины (ваш код даже не считают, что причиной может также иметь дело). Вы можете использовать специальное сообщение вместо «Ошибка», но это не имеет большого значения.

+0

Я никогда не понимал, что существует разница между ниже. logger.error ("Ошибка:" + e); logger.error ("Ошибка:", e); Строка конкатенации не работает, что было моим делом. Благодарю. – user3930151

0

Вы можете использовать @ExceptionHandler. Here вы найдете несколько примеров и увидите, что вам не нужно изменять текущий код. Не забудьте использовать Logger или поместите System.out.printLn(), чтобы увидеть stacktrace исключения. Также, возможно, вам стоит подумать об отладке вашего метода, чтобы увидеть, что параметр или метод waht имеет значение null.

+0

Я делаю то, что упоминается в примере. Я обнаружил, что getcause является исключением из null-указателя. когда я регистрирую сообщение, оно говорит только нулевое значение без какой-либо другой информации. в eclipse, если я проверяю, getcause имеет бесконечное количество getcause. – user3930151

+0

mmmm Возможно, вы используете e.getMessage(), вместо этого вам нужно поместить e.printStackTrace() или напечатать только один похожий объект, это приведет к печати исключения с именами классов и методами, которые его выбрасывают. –

+0

Поместите это на свой код: {logger.error ("Ошибка:", e); } –