@Provider
public class JerseyExceptionMapper implements ExceptionMapper<JerseyException> {
@Override
public Response toResponse(JerseyException jerseyException) {
return Response.status(jerseyException.getErrorCode()).
entity(jerseyException.getJsonResponseObj()).
type(MediaType.APPLICATION_JSON).
build();
}
}
Il codice ha sopra i risultati indesiderati quando si utilizza un componente <error-page>
nel web.xml
. Ad esempio, se il mio Response.status
è impostato su 400 e il mio componente error-page
definisce un <error-code>
di 400, il server Web reindirizzerà la richiesta alla posizione definita nello web.xml
.Ignorando web.xml errore-page con Jersey ExceptionMapper
Questo ovviamente non è quello che voglio per le richieste REST. Ho letto un altro post su StackOverflow che diceva che la ragione per cui una richiesta viene trasferita allo error-page
è perché è impostato HttpServletResponse.sendError(400)
. Quel post diceva che se si imposta HttpServletResponse.setStatus(400)
invece, lo error-page
verrà ignorato.
Se ciò è vero, non vedo come sia utile poiché non ho implementato il codice Jersey. L'opzione che sto vedendo è di investigare il codice sorgente della classe Response e possibilmente re-implementare il metodo dello status o forse altro codice di Jersey. C'è una semplice opzione qui o qualcosa che mi manca?
In sostanza, la mia domanda è: Dato che sto usando Jersey per il riposo e sto usando error-page nel mio web.xml
, come posso utilizzare il codice di cui sopra, mentre ignorando l'error-page
solo per il codice Jersey? Qualsiasi altro codice che causa errori HTTP dovrebbe andare a error-page
. O c'è un'altra soluzione che non coinvolge error-page
ma funzionerà esattamente come voglio?
Quali servlet container sono voi usando? questo potrebbe essere correlato a https://java.net/jira/browse/JERSEY-2673 –
I Impossibile riprodurre questo problema (glassfish 4 jersey 2.13). 1) Che cosa è 'JerseyException'? 2) Hai controllato se il mapper è stato chiamato? 3) Per fare questo, ho semplicemente fatto una classe 'JerseyException' estendere' WebApplicationException' e l'ho lanciata da un metodo di risorsa. 4) Se il 3. non funziona per te, puoi fornire ulteriori informazioni per riprodurre questo, come l'ambiente, la versione di Jersey, Server, dove viene lanciata l'eccezione. –