Java 如何从RestTemplate获取重定向url?
我想使用http GET调用RestTemplate并检索状态代码和重定向的url(如果有) 如何做到这一点Java 如何从RestTemplate获取重定向url?,java,spring,url,redirect,resttemplate,Java,Spring,Url,Redirect,Resttemplate,我想使用http GET调用RestTemplate并检索状态代码和重定向的url(如果有) 如何做到这一点 使用自定义的重定向策略创建ApacheHttpClient,您可以在重定向发生时拦截中间响应 将默认请求工厂替换为HttpComponentsClientHttpRequestFactory和新的ApacheHttpClient 有关更多信息,请查看。或者重复使用DefaultRedirectStrategy,如下例所示: CloseableHttpClient httpClient =
HttpClient
,您可以在重定向发生时拦截中间响应HttpComponentsClientHttpRequestFactory
和新的ApacheHttpClient
DefaultRedirectStrategy
,如下例所示:
CloseableHttpClient httpClient = HttpClientBuilder
.create()
.setRedirectStrategy( new DefaultRedirectStrategy() {
@Override
public boolean isRedirected(HttpRequest request, HttpResponse response,
HttpContext context) throws ProtocolException {
System.out.println(response);
// If redirect intercept intermediate response.
if (super.isRedirected(request, response, context)){
int statusCode = response.getStatusLine().getStatusCode();
String redirectURL = response.getFirstHeader("Location").getValue();
System.out.println("redirectURL: " + redirectURL);
return true;
}
return false;
}
})
.build();
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
RestTemplate restTemplate = new RestTemplate(factory);
.......
在SimpleClientHttpRequestFactory中使用Spring并重写prepareConnection()
RestTemplate restTemplate = new RestTemplate( new SimpleClientHttpRequestFactory(){
@Override
protected void prepareConnection( HttpURLConnection connection, String httpMethod ) {
connection.setInstanceFollowRedirects(false);
}
} );
ResponseEntity<Object> response = restTemplate.exchange( "url", HttpMethod.GET, null, Object.class );
int statusCode = response.getStatusCodeValue();
String location = response.getHeaders().getLocation() == null ? "" : response.getHeaders().getLocation().toString();
RestTemplate RestTemplate=新的RestTemplate(新的SimpleClientHttpRequestFactory()){
@凌驾
受保护的void prepareConnection(HttpURLConnection连接,字符串httpMethod){
connection.setInstanceFollowDirections(false);
}
} );
ResponseEntity response=restemplate.exchange(“url”,HttpMethod.GET,null,Object.class);
int statusCode=response.getStatusCodeValue();
字符串位置=响应。getHeaders()。getLocation()==null?“”:response.getHeaders().getLocation().toString();
这不起作用。RestTemplate将遵循重定向。我认为,不是默认的httpclient。
RestTemplate restTemplate = new RestTemplate( new SimpleClientHttpRequestFactory(){
@Override
protected void prepareConnection( HttpURLConnection connection, String httpMethod ) {
connection.setInstanceFollowRedirects(false);
}
} );
ResponseEntity<Object> response = restTemplate.exchange( "url", HttpMethod.GET, null, Object.class );
int statusCode = response.getStatusCodeValue();
String location = response.getHeaders().getLocation() == null ? "" : response.getHeaders().getLocation().toString();