当前位置: 首页 > 面试题库 >

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

卢俭
2023-03-14
问题内容

试图将基本身份验证添加到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<SomeObject>, Object...) from the type
> RestTemplate refers to the missing type SomeObject    SomeObject cannot
> be resolved to a type

问题答案:

最后,使用以下命令可以更轻松地运行基本身份验证:

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<MyClass> response;
    httpHeaders = this.createHeaders("user", "pass");

    String url = "www.example.com"
    response = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<Object>(httpHeaders), MyClass.class);

而且有效!



 类似资料:
  • 我一直试图用restTemplate传递基本身份验证,但它甚至没有将身份验证头传递给服务器。下面是我使用的bean定义` `

  • 我正在使用Java的spring mvc(基于注释)。我需要在我的应用程序中做rest API。我对API和REST都很陌生。在我的REST应用程序中,所有的基本配置都需要做些什么?我计划使用“RestTemplate”如何用RestTemplate做基本的身份验证(在URL头中传递用户名和密码)?请任何人帮帮我。 提前道谢。

  • 问题内容: 我试图模仿Java中此curl命令的功能: 我使用Commons HttpClient 3.0编写了以下内容,但最终还是从服务器上获取了一个。有人可以告诉我我做错了什么吗? 我后来尝试了Commons HttpClient 4.0.1,但仍然遇到相同的错误: 问题答案: 好的,这样可以工作。万一有人想要它,这是对我有用的版本:)

  • 问题内容: 我目前正在尝试使用HTTP和HTTPS访问URL。我尝试访问的URL需要基本身份验证。使用HTTP可以正常工作,但是使用HTTPS则不能。我不确定是否需要使用HTTPS添加其他内容。该URL应该返回给我的文本是键值格式,可以加载到对象中。 这是到目前为止我尝试过的代码。 这是证书类别 当我删除所有证书代码(以及证书代码)时的错误消息: 问题答案: 问题似乎是由于在更改连接的和实例之前打

  • 问题内容: 我目前正在将第三方应用程序与我们的本地报告系统集成。我想使用基本身份验证来实现REST调用,但是在Spring 4.0.0中遇到了问题。我有一个简单的解决方案,效果很好: 但想通过以下方式将其重写为使用 ClientHttpRequestFactory : 此代码未编译,因为Spring 4.0.0中不再存在 CommonsClientHttpRequestFactory 类。有人知道

  • 我目前正致力于将第三方应用程序与我们的本地报告系统集成。我想用基本身份验证实现REST调用,但在Spring4.0.0中面临一些问题。我有一个简单的解决方案,效果很好: 但希望重写此代码,以便以以下方式使用ClientHttpRequestFactory: 由于Spring4.0.0中不再存在CommonsClientHttpRequestFactory类,因此没有编译此代码。有人知道其他的解决办