我正在尝试使用micrometer
获取剩余uri的指标。我读了this,this,以及一堆SO帖子。阅读完所有这些内容后,我对此有一些疑问。
为使micrometer
正常工作,应将uri参数化(Reference)。我假设这只是路径变量,而不是请求参数。我说得对吗?
我们根本不应该使用UriComponentsBuilder
,因为我们不想将uri扩展到resttemplate
之外,而让resttemplate
替我们做。
让我说如果我使用这个restClient.getForObject( fooSvcUrl, FooBar.class, uriVariables );
,micrometer
会看着fooSvcUrl
并在此时进行参数化吗?
我问这是因为,如果我按照以下说明操作,将无法正常工作。我对么 ? restClient.getForObject(UriComponentsBuilder.fromUriString(fooSvcUrl).buildAndExpand(uriVariables ).toUri() , FooBar.class);
答案 0 :(得分:1)
我最近不得不处理所有这些问题,所以我可以给您以下答案:
1。。“参数化”在这里是指您将占位符应用到URI中,而不管其位置如何。基本上,只要您提供替换占位符的值,就可以对URI中的所有参数进行参数化-方案,主机,路径变量甚至查询参数。
因此,以下URI传递给RestTemplate
时将起作用:
https://www.foo.bar/baz/{id} with {"id":1}
https://www.foo.bar/baz?id={id} with {"id":1}
https://{host}/foo/{id}?target={target} with {"host":"www.foo.bar", "id":1, "target":"baz"}
2。。您不应该这样做,尤其是如果您希望将保留符号放入URI中,因为UriComponentsBuilder
会尝试立即对其进行编码,从而产生{{1} }双击编码,将无片段RestTemplate
首先变成#
,然后变成%23
。
3。是的,在将URI用作%2523
的参数时,应该对其进行参数化,因为带有参数值参数的重载方法将在实际执行请求之前对其进行扩展。