我正在尝试使用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);),它将在客户端中禁用重定向,但是我不想禁用重定向。