RestTemplate 已弃用的 DefaultUriTemplateHandler 的替代品是什么?

Dog*_*027 4 rest spring spring-mvc

在 Spring 5 之前,配置 RestTemplate 以访问单个 REST 主机的常用方法如下:

DefaultUriTemplateHandler uriTemplateHandler = new DefaultUriTemplateHandler();
uriTemplateHandler.setBaseUrl("http://host:port");
restTemplate.setUriTemplateHandler(uriTemplateHandler);
Run Code Online (Sandbox Code Playgroud)

以便在进行 REST 调用时,可以restTemplate.getForObject("/api/foo")代替restTemplate.getForObject("http://host:port/api/foo")(并可能在某处集中配置 REST 根 URL)

在 Spring 5 中,DefaultUriTemplateHandler已弃用,建议替换为DefaultUriBuilderFactory. 然而,虽然RestTemplate仍然有setUriTemplateHandler方法,但它没有接受 an 的 setter UriBuilderFactory,也没有UriBuilderFactory任何类似的东西setBaseUrl

Spring 5 中这种配置模式的正确替代品是什么?

Dog*_*027 6

显然,UriBuilderFactoryextends UriTemplateHandler,所以虽然 setter 方法RestTemplate保持不变,但可以在UriBuilderFactory那里使用一个实例:

restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory());
Run Code Online (Sandbox Code Playgroud)

至于 baseUrl 设置,这已经被做成了流畅的组件UriBuilderFactory,所以现在整个设置只需要一行:

restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory("http://host:port"));
Run Code Online (Sandbox Code Playgroud)

不过,他们确实应该更好地记录这种变化。