1 package common.http.error; 2 3 import java.lang.annotation.ElementType; 4 import java.lang.annotation.Retention; 5 import java.lang.annotation.RetentionPolicy; 6 import java.lang.annotation.Target; 7 8 /** 9 * <p>L'annotazione consente di impostare in modo dichiarativo il percorso su cui una servlet effettua 10 * il dispatch in caso di errore.</p> 11 * <p>Affinché funzioni, è necessario che la servlet su cui applicare l'annotazione estenda {@link common.http.interceptor.InterceptableServlet}</p> 12 * <p>È possibile applicare l'annotazione ai singoli metodi "doX" implementati (es. doGet). Applicare l'annotazione 13 * direttamente alla classe equivale ad applicarla su tutti i metodi "doX" implementati.</p> 14 * <p>Quando un metodo "doX" annotato con {@link ForwardOnError} lancia una particolare eccezione 15 * (elencate in basso), si verificano le seguenti azioni: </p> 16 * <ul> 17 * <li>Viene catturata l'eccezione allo scopo di recuperare i messaggi di errore rilevanti 18 * per inserirli nell'attributo di richiesta <pre>errors</pre></li> 19 * <li>Viene impostato lo status code 400 BAD REQUEST</li> 20 * <li>Viene passato il controllo (mediante metodo <pre>forward</pre> alla servlet al percorso specificato)</li> 21 * </ul> 22 * <p>Le eccezioni catturate sono le seguenti: </p> 23 * <table> 24 * <tr> 25 * <td>Eccezione</td><td>Messaggi di errore</td> 26 * </tr> 27 * <tr> 28 * <td>{@link javax.validation.ConstraintViolationException}</td><td>I messaggi degli oggetti {@link javax.validation.ConstraintViolation}</td> 29 * </tr> 30 * <tr> 31 * <td>{@link IllegalArgumentException}</td><td>{@link IllegalArgumentException#getMessage()}</td> 32 * </tr> 33 * </table> 34 * @see ForwardOnErrorInterceptor 35 * @see common.http.interceptor.InterceptableServlet 36 * @see common.http.interceptor.ServletInterceptor 37 */ 38 @Target({ElementType.METHOD,ElementType.TYPE}) 39 @Retention(RetentionPolicy.RUNTIME) 40 public @interface ForwardOnError { 41 /** 42 * @return L'URL pattern dove effettuare il forward della richiesta 43 */ 44 String value(); 45 }