2016-09-11 6 views
0

나는 maven 다중 모듈 프로젝트로 spring rest 어플리케이션을 구현 중이다. 웹, 서비스 및 DAO의 컨트롤러를 레이어로 사용합니다.spring rest except service

서비스 레이어의 모든 예외에 대해 정확한 원인과 스택 추적을 찾는 데 문제가 있습니다. 나는 서비스 메소드에서 try catch 블록을 사용하지 않는다. 대신, 나는 단지 예외를 던지고있다. 이제 널 포인터 예외가 발생하면 전역 예외 핸들러가 예외를 찾습니다. 그것은 null이라고 말하지만 어떤 스택 추적도 제공하지 않습니다.

try catch 블록을 사용해야합니까? 그렇다면 서비스 방법 전체에 이러한 블록을 갖출 것입니다.

모든 의견을 환영합니다.

+0

전역 예외 처리기를 표시하십시오. 스택 트레이스가 보이지 않는다면 스택 트레이스를 보여주지 않는다고 가정합니다. – Kayaman

+0

@ExceptionHandler ({Exception.class}) @ResponseBody 공공 ResponseEntity handleAnyException (예외 전자) { \t logger.error ("오류 :"+ e.getMessage()); \t logger.error ("오류 [원인] :"+ e.getCause()); } – user3930151

+0

한 가지 더. 호출 대상 예외가 호출되었습니다. 거기에 stacktrace도 없습니다. – user3930151

답변

1

예외 처리기에서 말하는 것이 아니기 때문에 스택 트레이스를 표시하지 않습니다. 코드가 잘못되어 손상되었습니다. 당신이 발생하는 예외가 쓸모가 무엇을보고 getMessage()를 사용

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

. NullPointerException은 메시지로 문자열 "null"을 반환하는데, 이는 문제를 1 비트 해결하는 데 도움이되지 않습니다. 그런 이유를 로깅하면 toString() 메서드가 cause으로되어 도움이되지 않습니다. 예외 처리하는

유일한 방법은 다음과 같습니다이 어떤 원인을 포함, 제대로 스택 트레이스를 기록합니다

logger.error("Error", e); 

(코드도 원인도 원인이있을 수 있음을 고려하지 않았다). "오류"대신 사용자 지정 메시지를 사용할 수 있지만 실제로는 문제가되지 않습니다.

+0

나는 아래에 차이점이 있다는 것을 결코 깨닫지 못했다. logger.error ("오류 :"+ e); logger.error ("오류 :", e); 문자열 연결이 작동하지 않습니다. 이는 제 경우입니다. 감사. – user3930151

0

@ExceptionHandler를 사용할 수 있습니다. Here 몇 가지 예를 찾아보고 현재 코드를 수정하지 않아도됩니다. Logger를 사용하거나 System.out.printLn()을 넣어 예외의 스택 추적을 확인하십시오. 어쩌면 당신은 메서드를 디버깅하여 매개 변수 또는 메서드가 null 값을 가짐을 확인해야합니다.

+0

나는 예제에서 언급 한 것을하고있다. getcause null 포인터 예외로 찾을. 메시지를 기록 할 때 다른 정보가없는 null 만 표시됩니다. 내가 조사한다면 일식에서 getcause는 무한히 많은 getcause를 가진다. – user3930151

+0

mmmm 아마 e.getMessage()를 사용하고 있습니다. 대신 e.printStackTrace()를 넣거나 object처럼 인쇄하면 클래스 이름과 클래스를 던져 버리는 메소드의 예외가 출력됩니다. –

+0

코드에 넣으십시오 : {logger.error ("Error :", e); } –