![](/img/trans.png)
[英]Getting jersey.api.client.UniformInterfaceException, when HTTP response is 204 (no content)
[英]Jersey test - ExceptionMapper - UniformInterfaceException when HTTP status is not 200
我必須使用jersey-test-framework-grizzly2測試Jersey 1.19。 存在具有注冊的REST端點和異常映射器類的配置類:
public class ConfiguredMyServiceTest extends JerseyTest {
@Override
protected int getPort(int defaultPort) {
return 8080;
}
public static class AppConfig extends DefaultResourceConfig {
public AppConfig() {
getSingletons().add(new ExceptionMapperProvider());
getSingletons().add(new MyService());
}
}
@Override
public WebAppDescriptor configure() {
return new WebAppDescriptor.Builder()
.initParam(WebComponent.RESOURCE_CONFIG_CLASS,
AppConfig.class.getName())
.build();
}
}
當我執行/測試返回HTTP狀態200的REST端點時,它運行良好。
如果拋出異常,則異常映射器會很好地處理它,並返回帶有錯誤代碼的返回對象javax.ws.rs.core.Response:
@Provider
@Singleton
public class ExceptionMapperProvider implements ExceptionMapper<Exception>{
@Override
public Response toResponse(final Exception exception){
return Response.status(HttpStatusCodes.STATUS_CODE_SERVER_ERROR).entity(new BasicResponse(InternalStatus.UNHANDLED_EXCEPTION, exception.getMessage())).type(MediaType.APPLICATION_JSON).build();
}
}
但是,我得到
com.sun.jersey.api.client.UniformInterfaceException: POST http://localhost:8080/v1/my-service/ returned a response status of 401 Unauthorized
當我嘗試在JUnit測試中聲明響應時。 如何獲得格式正確的響應而不是UniformInterfaceException?
將預期的類類型更改為com.sun.jersey.api.client.ClientResponse
protected ClientResponse executeGet(String path){
WebResource resource = resource().path(path);
Builder builder = resource.header("Content-Type", "application/json;charset=UTF-8");
return builder.get(ClientResponse.class);
}
現在,它能夠處理各種HTTP狀態並解析基礎響應:
ClientResponse clientResponse = executeGet("/info");
if (clientResponse.getStatus() == 200)
CustomResponseType customResponse = clientResponse.getEntity(CustomResponseType.class);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.