[英]How to stop jersey client from throwing exception on Http 301?
我正在使用Jersey客戶端對我的服務運行一些集成測試。 但是,我的一個呼叫發送了重定向。 我希望獲得重定向,但是當Jersey Client獲得重定向時,它會出現com.sun.jersey.api.client.UniformInterfaceException錯誤。 有什么辦法可以讓它接受重定向的響應,然后讓我知道它得到了什么?
您可以捕獲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;
}
}
還要注意,跟隨重定向(在setUp方法中)應設置為false,以獲取UniformInterfaceException而不是跟隨重定向(如果在Location標頭中指定了重定向)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.