Skip to content

MetricsRestTemplateCustomizer and LocalHostUriTemplateHandler cannot be used together when building a RestTemplate with RestTemplateBuilder #26812

@jhorstmann

Description

@jhorstmann

The changes in #25744 break some usages of LocalHostUriTemplateHandler. The following code fails after updating from 2.4.4 to 2.4.6

restTemplate = restTemplateBuilder.defaultMessageConverters()
        .uriTemplateHandler(LocalHostUriTemplateHandler(context.environment))
        .errorHandler(DefaultResponseErrorHandler())
        .build()

with

java.lang.IllegalArgumentException: RootUri must not be null

at org.springframework.util.Assert.notNull(Assert.java:201)
at org.springframework.boot.web.client.RootUriTemplateHandler.<init>(RootUriTemplateHandler.java:61)
at org.springframework.boot.web.client.RootUriTemplateHandler.withHandlerWrapper(RootUriTemplateHandler.java:96)
at org.springframework.boot.actuate.metrics.web.client.MetricsClientHttpRequestInterceptor.createUriTemplateHandler(MetricsClientHttpRequestInterceptor.java:105)
at org.springframework.boot.actuate.metrics.web.client.MetricsRestTemplateCustomizer.customize(MetricsRestTemplateCustomizer.java:61)
at org.springframework.boot.web.client.RestTemplateBuilder.configure(RestTemplateBuilder.java:634)
at org.springframework.boot.web.client.RestTemplateBuilder.build(RestTemplateBuilder.java:589)

The LocalHostUriTemplateHandler extends RootUriTemplateHandler and so gets the special handling introduced here. However, it does not have the rootUri field set and instead override the getRootUri method, which causes this line to pass a null rootUri

Metadata

Metadata

Assignees

No one assigned

    Labels

    type: regressionA regression from a previous release

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions