2016-04-13 9 views
6

Ich habe diesen nutzlosen Endpunkt in Pfad "/ test":Jersey gibt 404 mit einem beliebigen Fehlerstatuscode zurück?

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

und teste ich es so:

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

Aber ich bekomme eine Assertion Fehler:

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

Diese passiert in mehr Codes: 400, 500 ... abgesehen von 200.

Ich benutze Spring Boot. Wenn ich bei der Ausführung des Tests einen Haltepunkt in meine Endpunktmethode einfüge, wird die Ausführung dort angehalten, sodass die Anforderung im Test ordnungsgemäß ausgeführt wird. Wenn ich den Statuscode (in der Ressource und im Test) ebenfalls auf 200 ändere, wird der Test bestanden.

Was passiert?

+0

Ja, es war. Ich habe die Lösung gefunden. Post es als Antwort und ich werde akzeptieren :) –

Antwort

9

Das Standardverhalten bei Jersey, wenn ein Fehlerstatus (4xx, 5xx) vorliegt, besteht darin, die Response.sendError des Servlets zu verwenden, was zu einer Umleitung zu einer Fehlerseite führt. Da es keine Fehlerseite einrichten, ergibt sich ein 404.

Wir haben dieses Verhalten, indem der Jersey-Eigenschaft ändern können

ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR

Sie können diese

in Ihrer ResourceConfig Unterklasse tun
public JerseyConfig extends ResourceConfig { 
    public JerseyConfig() { 
     property(ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR, true); 
    } 
} 

Oder (mit Spring Boot) können Sie es in Ihrer application.properties Datei hinzufügen.

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

Oder Sie können es in der 'web.xml' Datei hinzufügen, als '' von Ihrem Jersey 'ServletContainer' Servlet. Vielen Dank – watery

2

Ich hatte dieses Problem auch und löste es ErrorMvcAutoConfiguration aus der Feder Boot-Autokonfigurations durch Ausschließen:

@EnableAutoConfiguration(exclude = { ErrorMvcAutoConfiguration.class })