使用RestTemplate进行基本身份validation – 编译错误 – 构造函数HttpClient()不可见

试图将基本身份validation添加到restTemplate

我遇到的问题是我无法初始化:(在代码片段中都有导入)

HttpClient client = new HttpClient(); 

此代码解决了编译错误(eclipse没有提供修复此问题的建议)

1)问题是什么?

2)我输入了错误的课程吗?

我的代码片段:

 import org.apache.http.client.HttpClient; //OR (not together) import sun.net.www.http.HttpClient; HttpClient client = new HttpClient(); //this line dosent compile UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("USERNAME","PASS"); client.getState().setCredentials( new AuthScope("www.example.com", 9090, AuthScope.ANY_REALM), credentials); CommonsClientHttpRequestFactory commons = new CommonsClientHttpRequestFactory(client); RestTemplate template = new RestTemplate(commons); SomeObject result = template.getForObject( "http://www.example.com:9090/",SomeObject.class ); 

运行此获取exception:

 > failed due to an unhandled exception: java.lang.Error: Unresolved > compilation problems: The constructor HttpClient() is not visible > The method getState() is undefined for the type HttpClient > CommonsClientHttpRequestFactory cannot be resolved to a type > CommonsClientHttpRequestFactory cannot be resolved to a type > SomeObject cannot be resolved to a type The method > getForObject(String, Class, Object...) from the type > RestTemplate refers to the missing type SomeObject SomeObject cannot > be resolved to a type 

最后使用以下方法更容易运行基本身份validation:

 restTemplate.exchange() 

并不是

 restTemplate.getForObject() 

我的代码片段:

 private HttpHeaders createHeaders(final String username, final String password ){ HttpHeaders headers = new HttpHeaders(){ { String auth = username + ":" + password; byte[] encodedAuth = Base64.encodeBase64( auth.getBytes(Charset.forName("US-ASCII")) ); String authHeader = "Basic " + new String( encodedAuth ); set( "Authorization", authHeader ); } }; headers.add("Content-Type", "application/xml"); headers.add("Accept", "application/xml"); return headers; } RestTemplate restTemplate = new RestTemplate(); ResponseEntity response; httpHeaders = this.createHeaders("user", "pass"); String url = "www.example.com" response = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity(httpHeaders), MyClass.class); 

它的工作原理!

如果使用Apache HttpClient,则实例化DefaultHttpClient ,因为HttpClient只是一个接口:

 HttpClient httpclient = new DefaultHttpClient(); 

请参阅此处有关使用HttpClient各种身份validation方案的文档。

我们可以通过以下方式在Spring启动中使用它:

  @SpringBootApplication 

public class Application实现CommandLineRunner {

 private static final Logger log = LoggerFactory.getLogger(Application.class); public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Override public void run(String... args) throws Exception { try{ RestTemplate restTemplate = new RestTemplate(); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders = this.createHeaders(); ResponseEntity response; response = restTemplate.exchange("",HttpMethod.GET,new HttpEntity(httpHeaders),String.class); log.info(response.toString()); } catch(Exception e) { System.out.println("Exception"+e); } } private HttpHeaders createHeaders(){ HttpHeaders headers = new HttpHeaders(){ { set( "Authorization", "3ee140"); } }; return headers; } 

}