2013-05-06 8 views
5

Ho un'istruzione SQL che presumo restituirà una riga, perché sto passando la chiave primaria. Quindi le mie scelte sono aDevo Catch EmptyResultDataAccessException?

  1. Avvolgere il queryForObject in un try/catch, la cattura EmptyResultDataAccessException, e tornando nulla
  2. Modificare la chiamata a queryForList, e scartare l'elenco e (si spera) restituire il 1 ° elemento, o null.

Ho letto da qualche parte il cathing un EmptyResultDataAccessException, poiché estende l'eccezione di runtime, è una cattiva pratica.

Ma non riesco a vedere niente di sbagliato.

Mi sarebbe interessato a opinioni acustici

+0

Se si passa una chiave primaria, come mai restituisce vuoto? –

+1

Beh, non lo è, e non dovrebbe mai farlo. "Dovrebbe" essere la parola chiave qui. – EdgeCase

risposta

1

La maggior parte delle volte che ho eseguito questo (mvc/ws) lascio che l'eccezione venga generata ma gestisco l'eccezione in un resolver di eccezione. Il problema con la restituzione di null è che un'applicazione dipende da esso e in fondo alla strada e dovresti eseguire un controllo Null in un secondo momento invece che al momento in cui dovrebbe essere presente. Questo può causare problemi perché non tutti gli sviluppatori potrebbero eseguire il controllo null quando richiesto e quindi potresti eseguire npe in seguito. A seconda del tipo di applicazione che si sta scrivendo, esistono diversi modi per catturare e gestire l'eccezione usando un risolutore di eccezioni. Utilizzando un resolver di eccezioni è possibile gestire ogni eccezione in modo diverso e fornire un feedback all'utente.

Ecco un modo per farlo utilizzando la molla in PVC. In questo modo puoi mettere un messaggio generale a un utente se l'oggetto con la chiave primaria non esiste. http://www.mkyong.com/spring-mvc/spring-mvc-exception-handling-example/

1

penso che sia perfettamente accettabile per la cattura di tale eccezione. È l'unica eccezione di primavera che riesco a ricordare, ma ho validi casi d'uso per cercare di trovare un record potenzialmente non esistente.