当前位置: 首页 > 知识库问答 >
问题:

Spring Boot-rest模板和rest模板构建器

汪翰墨
2023-03-14
@Bean
public RestTemplate getRestClient() {
    RestTemplate restClient = new RestTemplate();
    ...
    return restClient;
}

Spring参考提到RestTemplateBuilder应该通过RestTemplateCustomizer进行定制。如何用一个构建器管理来自多个IP地址的多个URI?

如何通过RestTemplateBuilder向所有RestTemplates全局添加BasicAuthentication,这是一个好的实践吗?

多谢帮忙。

我考虑为每个服务器设置一个RestTemplateBuilder。我不想手动执行此操作--我更喜欢使用Spring机制。

有人帮忙吗?

共有1个答案

龙隐水
2023-03-14

>

  • 不,您不需要这样做,通常您将拥有on rest模板实例,并且您将每次传递不同的url,并相应地请求参数。

    String result = restTemplate.getForObject("http://example.com/hotels/{hotel}/bookings/{booking}", String.class, vars);
    
    Foo foo = restTemplate.getForObject(fooResourceUrl + "/1", Foo.class);
    

    一个来自spring doc的描述性示例,您可以向构建器添加尽可能多的自定义器

    public class ProxyCustomizer implements RestTemplateCustomizer {
    
        @Override
        public void customize(RestTemplate restTemplate) {
            HttpHost proxy = new HttpHost("proxy.example.com");
            HttpClient httpClient = HttpClientBuilder.create()
                    .setRoutePlanner(new DefaultProxyRoutePlanner(proxy) {
    
                        @Override
                        public HttpHost determineProxy(HttpHost target,
                                HttpRequest request, HttpContext context)
                                        throws HttpException {
                            if (target.getHostName().equals("192.168.0.5")) {
                                return null;
                            }
                            return super.determineProxy(target, request, context);
                        }
    
                    }).build();
            restTemplate.setRequestFactory(
                    new HttpComponentsClientHttpRequestFactory(httpClient));
        }
    
    }
    

    任何RestTemplateCustomizer bean都将自动添加到自动配置的RestTemplateBuilder中。此外,可以通过调用additionalCustomizers(RestTemplateCustomizer…)来创建具有额外自定义器的新RestTemplateBuilder

    @Bean
    public RestTemplateBuilder restTemplateBuilder() {
       return new RestTemplateBuilder()
            .rootUri(rootUri)
            .basicAuthorization(username, password);
    }
    

  •  类似资料:
    • 我实现了一个模块来使用rest webservice(Json)并在oracle数据库中持久化。我只在Spring IOC上工作,但可以使用Spring BootRest模板和Spring数据JPA快速开发它。班级数量非常少。 对于json到java对象的转换,我使用http://www.jsonschema2pojo.org/并将所有生成的java对象复制到我的项目中。现在,我想包括logic/

    • 我试图理解restTemplate上可用的readTimeout,它到底是什么? 它是请求在我们得到超时异常之前可以花费的总时间吗?

    • 如何使用RestTemplate在具有以下行为的服务器中执行post请求:

    • 我有一个方法,调用一个endpoint来发布客户我怎么才能只得到消息"EMAIL ALREADY EXISTS"从响应体的Rest模板,以便在FacesContext中显示它 这是回应机构

    • 我使用spring rest模板作为请求发送json数组。发送请求的源代码如下: 并接受请求: 问题是它给了我以下错误:无法写入请求:找不到适合请求类型[org.json.JSONArray]的HttpMessageConverter。任何建议都是可以接受的。

    • 我有一项服务,我需要通过rest向外部服务器询问一些信息: 如何为getListofObjectsA()编写JUnit测试? 我尝试了以下方法: 然而,上面的代码不起作用,它表明为。如何更正测试以正确模拟restTemplate。交换?