RestTemplate的java测微计统计信息
我正在尝试使用micrometer
获取rest uri的度量。我读了this,this,还有一堆SO帖子。读完所有这些,我有一些问题
为了使
micrometer
正常工作,uri应该参数化(Reference)。我假设这是唯一的路径变量,而不是请求参数。我说得对吗我们是否应该根本不使用
UriComponentsBuilder
,因为我们不想在resttemplate
之外扩展uri,让resttemplate
为我们做这件事假设我使用这个
restClient.getForObject( fooSvcUrl, FooBar.class, uriVariables );
,那么micrometer
会看fooSvcUrl
吗?在这一点上,它应该参数化吗? 我问这个问题是因为如果我跟随,它将不起作用。我说得对吗restClient.getForObject(UriComponentsBuilder.fromUriString(fooSvcUrl).buildAndExpand(uriVariables ).toUri() , FooBar.class);
# 1 楼答案
我最近不得不处理所有这些事情,所以我可以给你以下答案:
1“参数化”在这里意味着将占位符应用到URI中,而不管它们的位置如何。基本上,只要提供替换占位符的值,就可以参数化URI中的所有内容——方案、主机、路径变量甚至查询参数
因此,当传递给
RestTemplate
时,以下URI将起作用:2您不应该这样做,尤其是如果您希望将保留符号放入您的URI中,因为
UriComponentsBuilder
会立即尝试对它们进行编码,这会导致RestTemplate
在编码上双击,首先将非片段#
变成%23
,然后变成%2523
3没错,当URI用作
RestTemplate.getForObject
的参数时,应该对其进行参数化,因为采用参数值参数的重载方法将在实际执行请求之前对其进行扩展