View Javadoc
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  }