So come gestire genericamente le eccezioni in Grails utilizzando UrlMappings e un ErrorController per la gestione delle eccezioni generiche, in modo che se un'eccezione sfugge a un controller, l'utente verrà inviato a una pagina di errore generica e l'eccezione essere registrato So anche come usare i blocchi try/catch per gestire eccezioni specifiche e provare a recuperare da loro.Gestione delle eccezioni nei controller Grails
Ma nella maggior parte dei controller, voglio solo dare all'utente un messaggio di errore leggermente più specifico se si verifica un'eccezione. Quindi, nell'azione di creazione, voglio dire all'utente che l'oggetto non è stato creato. O nell'azione di importazione, voglio dire all'utente che l'importazione non è riuscita. In questo momento, i controllori assomigliano:
class ThingController {
def create = {
try {
// The real controller code, which quickly hands it off to a service
} catch (Exception e) {
handleException(e, "There was an error while attempting to create the Thing")
}
}
def delete = {
try {
// The real controller code, which quickly hands it off to a service
} catch (Exception e) {
handleException(e, "There was an error while attempting to delete the Thing")
}
}
private void handleException(Exception e, String message) {
flash.message = message
String eMessage = ExceptionUtils.getRootCauseMessage(e)
log.error message(code: "sic.log.error.ExceptionOccurred", args: ["${eMessage}", "${e}"])
redirect(action:index)
}
}
Si noti che i blocchi catch non fanno nulla di diverso in base al tipo o al contenuto della deroga; stanno solo dando un messaggio di errore leggermente più descrittivo basato sul controller. Il codice del controller "reale" è di solito 6-10 linee, quindi avere 4 righe di codice aggiuntive solo per cambiare il messaggio di errore sembra eccessivo. Inoltre, la regola "CatchException" di CodeNarc si lamenta, il che rafforza la mia opinione secondo cui ci deve essere un modo migliore per farlo. Presumo che altre applicazioni Grails abbiano requisiti simili. Qual è il modo idiomatico per specificare diversi messaggi di errore in base all'azione da cui l'eccezione ha gorgogliato?
Mi interessano le risposte che provengono dall'esperienza con un particolare modo di risolvere questo problema, o ancora meglio, collegano a codebase dove posso vedere la soluzione in pratica.
Per i voti negativi, si prega di spiegare cosa deve essere cambiato sulla domanda, o perché non è appropriato per Stack Overflow. Grazie –