代码之家  ›  专栏  ›  技术社区  ›  Greg Zuber

Spring:如何从RestTempalte获取rootUri

  •  7
  • Greg Zuber  · 技术社区  · 7 年前

    我使用这个配置类初始化RestTemplate:

    @Configuration
    public class RestTemplateConfig {
    
      @Value("${endpoint-url}")
      private String endpointUrl;
    
      @Bean
      public RestTemplate restTemplate(RestTemplateBuilder builder) {
        return builder
            .rootUri(endpointUrl)
            .messageConverters(new MappingJackson2HttpMessageConverter())
            .build();
      }
    }
    

    RootUriTemplateHandler handler = (RootUriTemplateHandler) restTemplate.getUriTemplateHandler();
    String uri = handler.getRootUri();
    restTemplate.postForLocation(uri, request);
    

    获取此URI。有没有更简单的方法来获取这个rootUri(无需强制转换)?或者直接向rootUri执行post请求?

    3 回复  |  直到 7 年前
        1
  •  10
  •   Tama    5 年前

    restTemplate.getUriTemplateHandler()。展开(“/”)

        2
  •  3
  •   Berthier Lemieux    7 年前

    @Configuration
    public class RestTemplateConfig {
    
       @Bean
       public RestTemplate restTemplate(RestTemplateBuilder builder,
                                        @Value("${endpoint-url}") String endpointUrl) {
         return builder
           .rootUri(endpointUrl)
           .messageConverters(new MappingJackson2HttpMessageConverter())
           .build();
       }
    }
    

    // Make a POST call to ${endpoint-url}/foobar
    
    String uri = "/foobar"; // The leading "/" is important!
    restTemplate.postForLocation(uri, request);
    
        3
  •  2
  •   glytching    7 年前

    听起来你想用 RestTemplate 传递的值 ${endpoint-url}

    • endpointUrl 还有你的 restTemplate 端点URL restTemplate .例如:

      @Component
      public class RestTemplateProvider {
      
          @Value("${endpoint-url}")
          private String endpointUrl;
      
          private final RestTemplate restTemplate;
      
          @Autowired
          public RestTemplateProvider(RestTemplateBuilder restTemplateBuilder) {
              this.restTemplate = restTemplateBuilder.rootUri(endpointUrl)
                      .messageConverters(new MappingJackson2HttpMessageConverter())
                      .build();
          }
      
          public RestTemplate provide() {
              return restTemplate;
          }
      
          public String getEndpointUrl() {
              return endpointUrl;
          }
      }
      
    • 注射 @Value("${endpoint-url}") private String endpointUrl;