001package common.http.error; 002 003import java.lang.annotation.ElementType; 004import java.lang.annotation.Retention; 005import java.lang.annotation.RetentionPolicy; 006import java.lang.annotation.Target; 007 008/** 009 * <p>L'annotazione consente di impostare in modo dichiarativo il percorso su cui una servlet effettua 010 * il dispatch in caso di errore.</p> 011 * <p>Affinché funzioni, è necessario che la servlet su cui applicare l'annotazione estenda {@link common.http.interceptor.InterceptableServlet}</p> 012 * <p>È possibile applicare l'annotazione ai singoli metodi "doX" implementati (es. doGet). Applicare l'annotazione 013 * direttamente alla classe equivale ad applicarla su tutti i metodi "doX" implementati.</p> 014 * <p>Quando un metodo "doX" annotato con {@link ForwardOnError} lancia una particolare eccezione 015 * (elencate in basso), si verificano le seguenti azioni: </p> 016 * <ul> 017 * <li>Viene catturata l'eccezione allo scopo di recuperare i messaggi di errore rilevanti 018 * per inserirli nell'attributo di richiesta <pre>errors</pre></li> 019 * <li>Viene impostato lo status code 400 BAD REQUEST</li> 020 * <li>Viene passato il controllo (mediante metodo <pre>forward</pre> alla servlet al percorso specificato)</li> 021 * </ul> 022 * <p>Le eccezioni catturate sono le seguenti: </p> 023 * <table> 024 * <tr> 025 * <td>Eccezione</td><td>Messaggi di errore</td> 026 * </tr> 027 * <tr> 028 * <td>{@link javax.validation.ConstraintViolationException}</td><td>I messaggi degli oggetti {@link javax.validation.ConstraintViolation}</td> 029 * </tr> 030 * <tr> 031 * <td>{@link IllegalArgumentException}</td><td>{@link IllegalArgumentException#getMessage()}</td> 032 * </tr> 033 * </table> 034 * @see ForwardOnErrorInterceptor 035 * @see common.http.interceptor.InterceptableServlet 036 * @see common.http.interceptor.ServletInterceptor 037 */ 038@Target({ElementType.METHOD,ElementType.TYPE}) 039@Retention(RetentionPolicy.RUNTIME) 040public @interface ForwardOnError { 041 /** 042 * @return L'URL pattern dove effettuare il forward della richiesta 043 */ 044 String value(); 045}