2014-10-30 11 views
6

Chcę dostosować odpowiedź 404, którą serwer (nie ja) wyrzuca, gdy nie może znaleźć żądanego zasobu, (lub rzuca niestandardowy wyjątek WebApplicationException siebie, jeśli można przetestować, czy żądany zasób jest obecny w jednej aplikacji, czy gdzieś gdzieś jest przechowywana Lista zasobów?). proszę nie odsyłaj mnie do rozwiązań, które sugerują rozszerzenie WebApplicationException, ponieważ nawet tak robię, moim problemem jest kiedy je wyrzucić ?, kiedy nie znaleziono zasobu! ale jak wyrazić tę potrzebę w jerseyowej strukturzeGdzie rzucić spersonalizowany błąd 404 w jersey, gdy HttpServer nie może znaleźć zasobu

+0

Co próbowałeś do tej pory? 'ExceptionMapper' może pomóc ... – zyexal

+0

Którą wersję Jersey używasz? –

+0

to powinno być Jersey 2.x, z grizzly-http-server 2.3.0, próbuję tutaj przykładów [link] (https://github.com/jersey/jersey/tree/master/examples) –

Odpowiedz

9

Jersey throwsjavax.ws.rs.NotFoundException, gdy nie można znaleźć punktu końcowego. Po prostu użyj programu odwzorowującego wyjątki, aby przekształcić go w odpowiedź wybraną:

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

dziękuję ale niestety po dodaniu twojego kodu, do tego samego pakietu, w którym znajduje się moja główna klasa, i uruchamiania 'curl -g -i http: // localhost: 8080/base/@@@ 11' otrzymuję 404 bez zawartości, o ile wiem "@ Provider" jest tutaj, aby powiedzieć serwerowi, to jest klasa do rzucenia, gdy zasób nie został znaleziony, czy to prawda? to jak to działa ?! –

+0

Nie sądzę, że muszę to gdzieś zarejestrować, prawda? –

+0

Jeśli skonfigurowałeś skanowanie pakietów i umieściłeś dostawcę w określonym pakiecie, to powinno działać. Istnieje kilka rodzajów dostawców w JAX-RS (więcej: http://stackoverflow.com/questions/13557442/what-does-provider-in-jax-rs-mean). ExceptionMappers umożliwiają przechwycenie dowolnego wyjątku, który chcesz obsłużyć i wygenerowanie niestandardowej odpowiedzi. W tym przypadku obsługujemy wyjątek NotFoundException, ponieważ jest on zgłaszany przez serwer, gdy nie znaleziono zgodnego zasobu. –

Powiązane problemy