在Apache wink rest客户端中处理重定向

时间:2018-06-20 12:07:14

标签: apache-wink

我正在尝试使用PUT REST服务,该服务将返回状态303(用于重定向)和新的GET URL信息。

当我使用邮递员应用程序调用此服务时,该应用程序已成功重定向到从PUT rest API接收的新URL,然后显示GET URL的响应。

但是当我尝试使用Java使用相同的Rest API时,使用Apache wink rest client,客户端显示消息-“用于rest调用的动词不正确-<GET API URL>”。

我调试了服务器,发现服务器正在正确执行PUT请求并发送响应,但是客户端无法使用GET方法重定向到新的URL。我认为客户端将重新使用PUT方法获取新的GET URL(这就是为什么它显示不正确的动词使用消息)的原因。

下面是我创建休息客户端的代码---

    private static RestClient getRestClient() {
    synchronized (monitor) {
        if (client != null) {
            return client;
        } else {
            if (config == null) {
                if (!isUseKerberos()) {
                    config = new ClientConfig();

                } else {
                    Pair<Registry<AuthSchemeProvider>, CredentialsProvider> cfgSPNEGO = configureHttpClientSPNEGO();
                    CloseableHttpClient client = HttpClients.custom().setDefaultAuthSchemeRegistry(cfgSPNEGO.getFirst()).setDefaultCredentialsProvider(cfgSPNEGO.getSecond())
                            .build();
                    config = new ApacheHttpClientConfig(client);
                }
                config.setLoadWinkApplications(false); // gets rid of the
                                                       // noisy application
                                                       // loading
                                                       // message...
                // Default the wink.client.readTimeout to 120secs
                config.readTimeout(120000);
                CLILogUtils.fine("Default wink.client.readTimeout: " + config.getReadTimeout() + "ms");
                // add any user supplied wink settings
                for (Entry<Object, Object> prop : System.getProperties().entrySet()) {
                    String key = String.valueOf(prop.getKey());
                    if (key.startsWith("wink.")) {
                        String value = String.valueOf(prop.getValue());
                        CLILogUtils.fine("Using wink property " + key + "=" + value);
                        Properties winkProps = config.getProperties();
                        if (winkProps == null) {
                            winkProps = new Properties();
                        }
                        winkProps.setProperty(key, value);
                        config.setProperties(winkProps);
                    }
                }
                if (!isUseKerberos()) {
                    config.handlers(ClientUtils.getAuthHandler(), ClientUtils.getNonSSOHandler());
                }

                client = new RestClient(config);
            }
            return client;
        }
    }
}

ClientConfig类中有一种方法(config.followRedirects(false);),它将在客户端中禁用重定向,但是我不想禁用重定向。

0 个答案:

没有答案