Java 配置SpringRESTTemplate

Java 配置SpringRESTTemplate,java,rest,resttemplate,spring-rest,Java,Rest,Resttemplate,Spring Rest,使用以下代码获取调用REST服务的信息 RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); String plainCreds = "test:test2"; byte[] plainCredsBytes = plainCreds.getBytes(); String base64Creds = DatatypeConverter.printBase64Binary(

使用以下代码获取调用REST服务的信息

RestTemplate restTemplate = new RestTemplate(); 
HttpHeaders headers = new HttpHeaders();

String plainCreds = "test:test2";
byte[] plainCredsBytes = plainCreds.getBytes();
String base64Creds = DatatypeConverter.printBase64Binary(plainCredsBytes);
headers.add("Authorization", "Basic " + base64Creds);
headers.add("Content-type","application/x-www-form-urlencoded;charset=utf-8");

headers.set("Accept", MediaType.APPLICATION_XML_VALUE);
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(baseUrl)
    .queryParam("id", "id1234"); 
HttpEntity<String> entity = new HttpEntity<>(headers);
ResponseEntity<String> response = restTemplate.exchange(
        builder.build().encode().toUri(),
        HttpMethod.GET, entity, String.class); 
RestTemplate RestTemplate=new RestTemplate();
HttpHeaders=新的HttpHeaders();
String plainCreds=“test:test2”;
byte[]plainCredsBytes=plainCreds.getBytes();
字符串base64Creds=DatatypeConverter.printBase64Binary(PlainCredBytes);
标题。添加(“授权”、“基本”+base64Creds);
headers.add(“内容类型”、“应用程序/x-www-form-urlencoded;字符集=utf-8”);
headers.set(“接受”,MediaType.APPLICATION\u XML\u值);
UriComponentsBuilder=UriComponentsBuilder.fromHttpUrl(baseUrl)
.queryParam(“id”、“id1234”);
HttpEntity=新的HttpEntity(标题);
ResponseEntity response=restemplate.exchange(
builder.build().encode().toUri(),
HttpMethod.GET、实体、字符串.class);
对此有以下疑问-

  • 我是否可以使用factory模式来获取RestTemplate,而不是使用new。它的优点和缺点是什么
  • 当前正在将凭据添加到上述代码的标题中。是否有更好的方法来实现它(例如在配置中,或者其他适合于生产代码的方法)
  • 谢谢

  • RestTemplate的一般使用模式是,您以所需的方式配置一个RestTemplate,然后在整个应用程序中重用它。创建它们是很昂贵的,所以创建尽可能少的(理想情况下只有一个)并重用它们是您应该做的

  • 有几种方法可以配置RestTemplate来自动向所有请求添加基本身份验证,但在我看来,这太复杂了,不值得这么做-您需要稍微处理一下,因此我认为最简单的解决方案是将手动步骤分解成一个帮助器类

  • --

    您的代码现在变成:

    HttpHeaders headers = RestTemplateUtils.addBasicAuth(new HttpHeaders(),
            "test", "test");
    
    headers.add("Content-type","application/x-www-form-urlencoded;charset=utf-8");
    headers.set("Accept", MediaType.APPLICATION_XML_VALUE);
    
    UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(baseUrl)
        .queryParam("id", "id1234"); 
    HttpEntity<String> entity = new HttpEntity<>(headers);
    ResponseEntity<String> response = RestTemplateUtils.template.exchange(
            builder.build().encode().toUri(),
            HttpMethod.GET, entity, String.class); 
    
    HttpHeaders headers=restemplateutils.addBasicAuth(新的HttpHeaders(),
    “测试”、“测试”);
    headers.add(“内容类型”、“应用程序/x-www-form-urlencoded;字符集=utf-8”);
    headers.set(“接受”,MediaType.APPLICATION\u XML\u值);
    UriComponentsBuilder=UriComponentsBuilder.fromHttpUrl(baseUrl)
    .queryParam(“id”、“id1234”);
    HttpEntity=新的HttpEntity(标题);
    ResponseEntity response=RestTemplateUtils.template.exchange(
    builder.build().encode().toUri(),
    HttpMethod.GET、实体、字符串.class);
    
    尽管我建议添加一些辅助方法来创建实体,并向实体添加任何其他标准头

  • RestTemplate的一般使用模式是,您以所需的方式配置一个RestTemplate,然后在整个应用程序中重用它。创建它们是很昂贵的,所以创建尽可能少的(理想情况下只有一个)并重用它们是您应该做的

  • 有几种方法可以配置RestTemplate来自动向所有请求添加基本身份验证,但在我看来,这太复杂了,不值得这么做-您需要稍微处理一下,因此我认为最简单的解决方案是将手动步骤分解成一个帮助器类

  • --

    您的代码现在变成:

    HttpHeaders headers = RestTemplateUtils.addBasicAuth(new HttpHeaders(),
            "test", "test");
    
    headers.add("Content-type","application/x-www-form-urlencoded;charset=utf-8");
    headers.set("Accept", MediaType.APPLICATION_XML_VALUE);
    
    UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(baseUrl)
        .queryParam("id", "id1234"); 
    HttpEntity<String> entity = new HttpEntity<>(headers);
    ResponseEntity<String> response = RestTemplateUtils.template.exchange(
            builder.build().encode().toUri(),
            HttpMethod.GET, entity, String.class); 
    
    HttpHeaders headers=restemplateutils.addBasicAuth(新的HttpHeaders(),
    “测试”、“测试”);
    headers.add(“内容类型”、“应用程序/x-www-form-urlencoded;字符集=utf-8”);
    headers.set(“接受”,MediaType.APPLICATION\u XML\u值);
    UriComponentsBuilder=UriComponentsBuilder.fromHttpUrl(baseUrl)
    .queryParam(“id”、“id1234”);
    HttpEntity=新的HttpEntity(标题);
    ResponseEntity response=RestTemplateUtils.template.exchange(
    builder.build().encode().toUri(),
    HttpMethod.GET、实体、字符串.class);
    

    尽管我建议添加一些辅助方法来创建实体并向其添加任何其他标准头。

    您是否只是从某个地方复制了该代码,而现在您不知道如何使用它?也许你应该阅读文档。在我的代码中使用它,效果很好。从某个地方弄来的。查看文档…但是仍然有这些疑问,在您查看文档之后,您所有的疑问都应该被清除。好的。谢谢你,卡亚曼:)。不过,如果任何有经验的人想分享他或她是如何做到这一点的,那还是很感激的。你是不是只是从某个地方复制了代码,而现在你却不知道如何使用它?也许你应该阅读文档。在我的代码中使用它,效果很好。从某个地方弄来的。查看文档…但是仍然有这些疑问,在您查看文档之后,您所有的疑问都应该被清除。好的。谢谢你,卡亚曼:)。但如果任何有经验的人想分享他或她是如何做到这一点的,非常感谢。感谢Raniz,您建议的更改非常有用。@Raniz我也在我的一个项目中使用了
    RestTemplate
    ,但我不知道如何
    使用
    RestTemplate
    设置每个请求的请求配置。我已经提出了这样一个问题。我想看看你是否能帮忙。任何帮助都将不胜感激。谢谢Raniz,您建议的更改非常有用。@Raniz我也在我的一个项目中使用
    RestTemplate
    ,但我不知道如何
    使用
    RestTemplate
    为每个请求设置请求配置。我已经提出了这样一个问题。我想看看你是否能帮忙。任何帮助都将不胜感激。