2014-10-30 8 views
6

Voglio personalizzare la risposta 404, che il server (non io) getta ogni volta che non trova una risorsa richiesta, (o lancia una WebApplicationException personalizzata me stesso, se è possibile verificare se una risorsa richiesta è presente in una app, probabilmente un elenco di risorse è memorizzato da qualche parte?). per favore non mi riferire a soluzioni che suggeriscono di estendere WebApplicationException, perché anche in questo caso, il mio problema è quando buttarlo ?, quando la risorsa non viene trovata! ma come esprimere questa esigenza nel jersey frameworkDove gettare errore 404 personalizzato in jersey quando HttpServer non riesce a trovare una risorsa

+0

Cosa hai provato fino ad ora? 'ExceptionMapper' potrebbe essere utile ... – zyexal

+0

Quale versione di Jersey usi? –

+0

si suppone che sia Jersey 2.x, con grizzly-http-server 2.3.0, sto provando esempi qui [collegamento] (https://github.com/jersey/jersey/tree/master/examples) –

risposta

9

Jersey throwsjavax.ws.rs.NotFoundException quando non è possibile trovare un endpoint. Basta usare un mappatore di eccezioni per trasformarlo in una risposta di tua scelta:

import javax.ws.rs.NotFoundException; 
import javax.ws.rs.core.Response; 
import javax.ws.rs.ext.ExceptionMapper; 
import javax.ws.rs.ext.Provider; 

@Provider 
public class NotFoundExceptionMapper implements ExceptionMapper<NotFoundException> { 

    public Response toResponse(NotFoundException exception) { 
     return Response.status(Response.Status.NOT_FOUND) 
       .entity("No such resource") 
       .build(); 
    } 
} 
+1

grazie ma sfortunatamente dopo aver aggiunto il tuo codice, nello stesso pacchetto in cui risiede la mia classe principale, ed eseguendo 'curl -g -i http: // localhost: 8080/base/@@@ 11' Sto ricevendo 404 senza contenuto, come per quanto ne so, '@ Provider' è qui per dire al server che questa è la classe da lanciare quando una risorsa non è stata trovata, è giusto? allora come farlo funzionare ?! –

+0

Non penso di aver bisogno di registrarlo da qualche parte, giusto? –

+0

Se è stata configurata la scansione del pacchetto e si è inserito un provider nel pacchetto specificato, dovrebbe funzionare. Esistono diversi tipi di provider in JAX-RS (maggiori informazioni: http://stackoverflow.com/questions/13557442/what-does-provider-in-jax-rs-mean). ExceptionMappers ti permette di catturare qualsiasi eccezione tu voglia gestire e produrre una risposta personalizzata. In questo caso gestiamo NotFoundException perché viene lanciato dal server quando non viene trovata alcuna risorsa corrispondente. –

Problemi correlati