2
我正在使用Jersey客戶端對我的服務運行一些集成測試。但是,我的一個呼叫發送重定向。我希望獲得重定向,但是當Jersey Client通過com.sun.jersey.api.client.UniformInterfaceException獲取重定向錯誤時。有沒有辦法讓它接受重定向的響應,讓我知道它有什麼?如何阻止球衣客戶端在Http 301上拋出異常?
我正在使用Jersey客戶端對我的服務運行一些集成測試。但是,我的一個呼叫發送重定向。我希望獲得重定向,但是當Jersey Client通過com.sun.jersey.api.client.UniformInterfaceException獲取重定向錯誤時。有沒有辦法讓它接受重定向的響應,讓我知道它有什麼?如何阻止球衣客戶端在Http 301上拋出異常?
您可以捕獲UniformInterfaceException,它提供了包含所有細節的響應字段。
你可以額外寫一些hamcrest匹配器來表達自己的期望:
import static javax.ws.rs.core.Response.Status.*;
import static org.junit.rules.ExpectedException.*;
import javax.ws.rs.core.Response.Status;
import org.hamcrest.*;
import org.junit.*;
import org.junit.rules.ExpectedException;
import com.sun.jersey.api.client.*;
public class MyResourceShould {
@Rule
public ExpectedException unsuccessfulResponse = none();
private WebResource resource;
@Before
public void setUp() {
Client client = Client.create();
client.setFollowRedirects(false);
resource = client.resource("http://example.com");
}
@Test
public void reportMovedPermanently() {
unsuccessfulResponse.expect(statusCode(MOVED_PERMANENTLY));
resource.path("redirecting").get(String.class);
}
public static Matcher<UniformInterfaceException> statusCode(Status status) {
return new UniformInterfaceExceptionResponseStatusMatcher(status);
}
}
class UniformInterfaceExceptionResponseStatusMatcher extends TypeSafeMatcher<UniformInterfaceException> {
private final int statusCode;
public UniformInterfaceExceptionResponseStatusMatcher(Status status) {
this.statusCode = status.getStatusCode();
}
public void describeTo(Description description) {
description.appendText("response with status ").appendValue(statusCode);
}
@Override
protected boolean matchesSafely(UniformInterfaceException exception) {
return exception.getResponse().getStatus() == statusCode;
}
}
還要注意,跟蹤重定向(在安裝方法)應該爲了得到而不是跟隨重定向UniformInterfaceException設置爲false(如果在位置標題中指定)。
你設法解決它嗎? –
如果您將實體類型設置爲ClientResponse而不是String等,您將不會得到異常。然後您可以閱讀回覆代碼並自行發出新的請求。我還沒有找到辦法做到這一點透明 –