2017-08-11 32 views
2

我使用這個配置類初始化RestTemplate得到rootUri:春:如何從RestTempalte

@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請求?

回答

1

聽起來就像您試圖使用RestTemplate來傳遞${endpoint-url}的值。那略顯尷尬的看着鑄造的作品,但你也許可以考慮這些替代品之一:

  • 創建封裝了endpointUrl和你restTemplate提供商,並注入該提供你需要的地方要麼endpointUrlrestTemplate。例如:

    @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;成曾經服務類都需要它。

0

您可以直接執行POST請求rootUri,只要你提供的restTemplate.postForLocation URL以「/」開頭。在這種情況下,Spring將自動添加restTemplate構造函數中提供的baseURI。

@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);