有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

RestTemplate的java测微计统计信息

我正在尝试使用micrometer获取rest uri的度量。我读了thisthis,还有一堆SO帖子。读完所有这些,我有一些问题

  1. 为了使micrometer正常工作,uri应该参数化(Reference)。我假设这是唯一的路径变量,而不是请求参数。我说得对吗

    1. 我们是否应该根本不使用UriComponentsBuilder,因为我们不想在resttemplate之外扩展uri,让resttemplate为我们做这件事

    2. 假设我使用这个restClient.getForObject( fooSvcUrl, FooBar.class, uriVariables );,那么micrometer会看fooSvcUrl吗?在这一点上,它应该参数化吗? 我问这个问题是因为如果我跟随,它将不起作用。我说得对吗restClient.getForObject(UriComponentsBuilder.fromUriString(fooSvcUrl).buildAndExpand(uriVariables ).toUri() , FooBar.class);


共 (1) 个答案

  1. # 1 楼答案

    我最近不得不处理所有这些事情,所以我可以给你以下答案:

    1“参数化”在这里意味着将占位符应用到URI中,而不管它们的位置如何。基本上,只要提供替换占位符的值,就可以参数化URI中的所有内容——方案、主机、路径变量甚至查询参数

    因此,当传递给RestTemplate时,以下URI将起作用:

    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会立即尝试对它们进行编码,这会导致RestTemplate在编码上双击,首先将非片段#变成%23,然后变成%2523

    3没错,当URI用作RestTemplate.getForObject的参数时,应该对其进行参数化,因为采用参数值参数的重载方法将在实际执行请求之前对其进行扩展