2016-04-13 17 views
6

Ho questo endpoint inutile nel percorso "/ test":Jersey restituisce 404 con un codice di stato di errore?

@PUT 
public Response doSomething() { 
    return Response.status(409).build(); 
} 

e provo in questo modo:

@Test 
public void uselessTest() { 
    put("/test").then().assertThat().statusCode(409); 
} 

Ma ottengo un errore di asserzione:

Expected status code <409> doesn't match actual status code <404>.

Questo succede in più codici: 400, 500 ... a parte 200.

Sto usando Spring Boot. Se inserisco un breakpoint nel mio metodo endpoint quando eseguo il test, l'esecuzione si ferma lì, quindi la richiesta nel test viene eseguita correttamente. Se cambio il codice di stato (in risorsa e anche nel test) a 200, passa il test.

Cosa sta succedendo?

+0

Sì, lo era. Ho trovato la soluzione. Pubblicalo come risposta e accetterò :) –

risposta

9

Il comportamento predefinito con Jersey, quando è presente uno stato di errore (4xx, 5xx), è quello di utilizzare il servlet Response.sendError, che risulta in un reindirizzamento a una pagina di errore. Dal momento che non v'è alcuna pagina di errore istituito, si traduce in un 404.

possiamo cambiare questo comportamento impostando la proprietà Jersey

ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR

È possibile farlo nel vostro ResourceConfig sottoclasse

public JerseyConfig extends ResourceConfig { 
    public JerseyConfig() { 
     property(ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR, true); 
    } 
} 

Oppure (con Spring Boot) è possibile aggiungerlo nel file application.properties.

spring.jersey.init.jersey.config.server.response.setStatusOverSendError=true 
+0

Oppure puoi aggiungerlo al file 'web.xml', come un' 'del servlet' 'ServletContainer' di Jersey. Grazie – watery

2

Ho avuto questo problema pure, e risolto escludendo ErrorMvcAutoConfiguration dal bagagliaio auto config primavera:

@EnableAutoConfiguration(exclude = { ErrorMvcAutoConfiguration.class }) 
Problemi correlati