簡體   English   中英

如何阻止球衣客戶端在Http 301上引發異常?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM