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 }