Jersey returns 404 有任何错误状态代码?
Jersey returns 404 with any error status code?
我在路径“/test”中有这个无用的端点:
@PUT
public Response doSomething() {
return Response.status(409).build();
}
我是这样测试的:
@Test
public void uselessTest() {
put("/test").then().assertThat().statusCode(409);
}
但是我得到一个断言错误:
Expected status code <409> doesn't match actual status code <404>.
更多代码会出现这种情况:400、500... 除了 200。
我正在使用 Spring Boot。如果我在 运行 测试时在我的端点方法中放置一个断点,执行将在那里停止,因此测试中的请求已正确完成。如果我将状态代码(也在资源和测试中)更改为 200,则测试通过。
发生了什么事?
当存在错误状态(4xx、5xx)时,Jersey 的默认行为是使用 servlet 的 Response.sendError
,这会导致重定向到错误页面。由于没有设置错误页面,它会导致 404。
我们可以通过设置 Jersey 属性
来改变这种行为
您可以在 ResourceConfig
子类中执行此操作
public JerseyConfig extends ResourceConfig {
public JerseyConfig() {
property(ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR, true);
}
}
或者(使用 Spring 引导)您可以将其添加到 application.properties
文件中。
spring.jersey.init.jersey.config.server.response.setStatusOverSendError=true
我也遇到了这个问题,通过从 spring 启动自动配置中排除 ErrorMvcAutoConfiguration 解决了这个问题:
@EnableAutoConfiguration(exclude = { ErrorMvcAutoConfiguration.class })
我在路径“/test”中有这个无用的端点:
@PUT
public Response doSomething() {
return Response.status(409).build();
}
我是这样测试的:
@Test
public void uselessTest() {
put("/test").then().assertThat().statusCode(409);
}
但是我得到一个断言错误:
Expected status code <409> doesn't match actual status code <404>.
更多代码会出现这种情况:400、500... 除了 200。
我正在使用 Spring Boot。如果我在 运行 测试时在我的端点方法中放置一个断点,执行将在那里停止,因此测试中的请求已正确完成。如果我将状态代码(也在资源和测试中)更改为 200,则测试通过。
发生了什么事?
当存在错误状态(4xx、5xx)时,Jersey 的默认行为是使用 servlet 的 Response.sendError
,这会导致重定向到错误页面。由于没有设置错误页面,它会导致 404。
我们可以通过设置 Jersey 属性
来改变这种行为您可以在 ResourceConfig
子类中执行此操作
public JerseyConfig extends ResourceConfig {
public JerseyConfig() {
property(ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR, true);
}
}
或者(使用 Spring 引导)您可以将其添加到 application.properties
文件中。
spring.jersey.init.jersey.config.server.response.setStatusOverSendError=true
我也遇到了这个问题,通过从 spring 启动自动配置中排除 ErrorMvcAutoConfiguration 解决了这个问题:
@EnableAutoConfiguration(exclude = { ErrorMvcAutoConfiguration.class })