0
我必須使用jersey-test-framework-grizzly2測試Jersey 1.19。有配置類與註冊的REST端點和異常映射類:Jersey狀態測試 - ExceptionMapper - UniformInterfaceException當HTTP狀態不是200
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測試中聲明Response。如何獲得格式正確的響應,而不是UniformInterfaceException?
你有任何身份驗證處理程序,因爲401意味着您無法進行身份驗證?雖然我不知道你常量STATUS_CODE_SERVER_ERROR的計算結果。這實際上是一個401嗎? –
STATUS_CODE_SERVER_ERROR表示500.我簡化了ExceptionMapper,所以有些部分被刪除。但是,如果它的401,500或其他錯誤代碼沒有問題,問題是相同的 - 當我測試時,我得到UniformInterfaceException而不是Response。 – Justas
我會建議啓用日誌過濾器,以便您可以看到請求/響應。如果您從未使用過,請點擊此處。你看到請求打你的休息服務嗎?以下是在客戶端啓用日誌過濾器的示例。 http://stackoverflow.com/questions/2332515/how-to-get-jersey-logs-at-server您也可能想要在LoggingFilter構造函數中將布爾printentity設置爲true。這將驗證401實際上來自服務器,而不是客戶端配置的問題。 –