Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring:如何从RestTempalte获取rootUri_Java_Spring_Resttemplate - Fatal编程技术网

Java Spring:如何从RestTempalte获取rootUri

Java Spring:如何从RestTempalte获取rootUri,java,spring,resttemplate,Java,Spring,Resttemplate,我正在使用此配置类初始化RestTemplate: @Configuration public class RestTemplateConfig { @Value("${endpoint-url}") private String endpointUrl; @Bean public RestTemplate restTemplate(RestTemplateBuilder builder) { return builder .rootUri(endpo

我正在使用此配置类初始化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请求?

听起来像是试图使用
restemplate
传递
${endpoint url}
的值。看起来有些尴尬的演员,但你也许可以考虑其中的一个选择:

  • 创建一个提供程序,用于封装
    endpointUrl
    和您的
    restTemplate
    ,并在需要
    endpointUrl
    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(${endpointUrl}”)私有字符串endpointUrl任何服务类都需要它


只要提供给restemplate.postForLocation的uri以“/”开头,就可以直接执行对rootUri的post请求。在这种情况下,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);

restemplate.getUriTemplateHandler().expand(“/”)

实际上,这是唯一一个简单回答标题中所述问题的答案。