2017-07-10 21 views
0

SpringブートでREST APIを構築しており、DAOレイヤーがHibernateで実装されています。アプリケーションで例外をスローして処理する正しい方法を理解する必要があります。このようHibernateを使用したSpringブートアプリケーションの例外処理

@Repository 
public class UserDaoImpl 
{ 
    public getAllUsers() throws Exception 
    { 
      //get All Users from DB 
    } 
} 

@Service 
public class UserServiceImpl 
{ 
    public getAllUsers throws MyCustomException 
    { try{ 
      userDaoImpl.getAllUsers(); 
     } 
     catch(Exception e) 
     { 
      throw MyCustomException(); 
     } 

    }   

} 

と例外マッパーで

@ControllerAdvice 
public class ApplicationExceptionHandler extends ResponseEntityExceptionHandler { 

@ExceptionHandler({MyCustomException.class}) 
    @ResponseBody 
    public ResponseEntity<?> handleCustomException(Exception e) { 
    log.error("", e); 
    Map<String, String> error = new HashMap<String, String>(); 
    error.put("message", e.getMessage()); 
    return new ResponseEntity<>(error, HttpStatus.NOT_ACCEPTABLE, MessageResource.getLogMessage("BAD_REQUEST_EXCEPTION")); 
    } 

} 

public class MyCustomException extends RuntimeException 
{ 
    ///// .... 


} 

だから私は追加したが、サービスレイヤでDAO層とキャッチで句を(例外をスロー)スローし、カスタム例外(チェックされない例外)でそれをラップしてみませんかコントローラーレイヤーで例外を宣言しないでください。 これが正しいですか?またはいくつかのより良い方法がありますか?

答えて

0

具体的に扱いたくない場合は、一般的に@ExceptionHandler({Exception.class})にすることをおすすめします。 また、カスタム処理が必要な状況に対して別の例外クラスを作成することもできます。

これは達成したいことによって異なります。 あなたのケースについて。 の例外DAO層は、要求が間違っているか、正しいパラメータを提供していないことを意味する必要はありません。それはマッピングの問題、DBアクセスの問題などである可能性があります。私はそれを私のカスタム例外にラップしないでください。一般的にはDataAccessExceptionにラップしないようにして、良いログを作り、一般的なエラーコードをクライアントに返します。

関連する問題