【问题标题】:What's the replacement for deprecated DefaultUriTemplateHandler for RestTemplate?RestTemplate 的弃用 DefaultUriTemplateHandler 的替代品是什么?
【发布时间】:2018-03-07 14:51:24
【问题描述】:

Pre-Spring 5,配置 RestTemplate 访问单个 REST 主机的常用方法如下:

DefaultUriTemplateHandler uriTemplateHandler = new DefaultUriTemplateHandler();
uriTemplateHandler.setBaseUrl("http://host:port");
restTemplate.setUriTemplateHandler(uriTemplateHandler);

这样在进行 REST 调用时,可以使用 restTemplate.getForObject("/api/foo") 而不是 restTemplate.getForObject("http://host:port/api/foo")(并且可能在某个集中位置配置 REST 根 URL)

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

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

【问题讨论】:

    标签: spring rest spring-mvc


    【解决方案1】:

    显然,UriBuilderFactory 扩展了UriTemplateHandler,所以虽然RestTemplate 中的setter 方法保持不变,但可以在那里使用UriBuilderFactory 实例:

    restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory());
    

    至于baseUrl的设置,已经用UriBuilderFactory做成了流畅的组件,所以整个设置现在就一行:

    restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory("http://host:port"));
    

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

    【讨论】:

    • 非常感谢。 Atlassian 在他们的 Swagger 验证器上使用了已弃用的。甚至他们都不知道如何用正确的非弃用版本替换它。
    猜你喜欢
    • 2019-04-05
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 2021-12-23
    相关资源
    最近更新 更多