Sto imparando JAX-RS (aka, JSR-311) usando Jersey. Ho con successo creato una risorsa Root e sto giocando intorno con parametri:JAX-RS/Jersey come personalizzare la gestione degli errori?
@Path("/hello")
public class HelloWorldResource {
@GET
@Produces("text/html")
public String get(
@QueryParam("name") String name,
@QueryParam("birthDate") Date birthDate) {
// Return a greeting with the name and age
}
}
Questa grande opera, e gestisce qualsiasi formato nella localizzazione corrente che è compresa entro la Data (String) (come AAAA/mm/gg e mm/gg/aaaa). Ma se fornisco un valore che non è valido o non compreso, ottengo una risposta 404.
Ad esempio:
GET /hello?name=Mark&birthDate=X
404 Not Found
Come posso personalizzare questo comportamento? Forse un codice di risposta diverso (probabilmente "400 Bad Request")? Che ne dici di registrare un errore? Forse aggiungere una descrizione del problema ("formato data errato") in un'intestazione personalizzata per facilitare la risoluzione dei problemi? Oppure restituire un'intera risposta di errore con i dettagli, insieme a un codice di stato 5xx?
Nel tuo esempio, la chiamata a super() dovrebbe essere leggermente diversa:.. super (Response.Status (Status.UNAUTHORIZED) entità (messaggio) .Type ("text/plain") costruire()); Grazie per l'intuizione però. –
Penso che il metodo non sarebbe stato eseguito nel suo esempio. – deamon
Nello scenario menzionato nella domanda, non avrai la possibilità di lanciare un'eccezione, poiché Jersey genererà un'eccezione in quanto non sarà in grado di creare un'istanza di oggetto Date dal valore di input. C'è un modo per intercettare l'eccezione di Jersey? Esiste un'interfaccia ExceptionMapper, che però intercetta anche le eccezioni generate dal metodo (ottenere in questo caso). –